Explication détaillée des membres statiques, des membres abstraits et des codes d'attribut des traits PHP

伊谢尔伦
Libérer: 2023-03-12 13:24:01
original
2462 Les gens l'ont consulté

Membres abstraits de Trait

Afin d'imposer des exigences sur les classes utilisées, les traits prennent en charge l'utilisation de méthodes abstraites.

Représente un exemple d'application d'exigences via des méthodes abstraites

<?php
trait Hello {
    public function sayHelloWorld() {
        echo &#39;Hello&#39;.$this->getWorld();
    }
    abstract public function getWorld();
}
class MyHelloWorld {
    private $world;
    use Hello;
    public function getWorld() {
        return $this->world;
    }
    public function setWorld($val) {
        $this->world = $val;
    }
}
?>
Copier après la connexion

Les statiquesmembres

Les traits peuvent être des membres statiques définition de méthode statique.

StatiqueExemples de variables

<?php
trait Counter {
    public function inc() {
        static $c = 0;
        $c = $c + 1;
        echo "$c\n";
    }
}
class C1 {
    use Counter;
}
class C2 {
    use Counter;
}
$o = new C1(); $o->inc(); // echo 1
$p = new C2(); $p->inc(); // echo 1
?>
Copier après la connexion

Exemples de méthodes statiques

<?php
trait StaticExample {
    public static function doSomething() {
        return &#39;Doing something&#39;;
    }
}
class Example {
    use StaticExample;
}
Example::doSomething();
?>
Copier après la connexion

Exemples de variables statiques et de méthodes statiques

<?php
trait Counter {
    public static $c = 0;
    public static function inc() {
        self::$c = self::$c + 1;
        echo self::$c . "\n";
    }
}
class C1 {
    use Counter;
}
class C2 {
    use Counter;
}
C1::inc(); // echo 1
C2::inc(); // echo 1
?>
Copier après la connexion

Attributs

Le trait peut également définir des attributs.

Exemple de définition d'attributs

<?php
trait PropertiesTrait {
    public $x = 1;
}

class PropertiesExample {
    use PropertiesTrait;
}

$example = new PropertiesExample;
$example->x;
?>
Copier après la connexion

Si un trait définit un attribut, la classe ne pourra pas définir un attribut du même nom, sinon une erreur sera générée. Si la définition de la propriété dans la classe est compatible avec sa définition dans le trait (même visibilité et valeur initiale) le niveau d'erreur est E_STRICT, sinon c'est une erreur fatale.

Exemples de conflits

<?php
trait PropertiesTrait {
    public $same = true;
    public $different = false;
}

class PropertiesExample {
    use PropertiesTrait;
    public $same = true; // Strict Standards
    public $different = true; // 致命错误
}
?>
Copier après la connexion

Différences d'utilisation

Exemples d'utilisations différentes

<?php
namespace Foo\Bar;
use Foo\Test;  // means \Foo\Test - the initial \ is optional
?>
<?php
namespace Foo\Bar;
class SomeClass {
    use Foo\Test;   // means \Foo\Bar\Foo\Test
}
?>
Copier après la connexion

La première utilisation est l'utilisation pour l'espace de noms FooTest, ce que l'on trouve est FooTest, la deuxième utilisation est d'utiliser un trait, ce que l'on trouve est FooBarFooTest.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal