Abstrakte Mitglieder von Trait
Um Anforderungen an die verwendeten Klassen durchzusetzen, unterstützen Traits die Verwendung abstrakter Methoden.
Stellt ein Beispiel für die Durchsetzung von Anforderungen durch abstrakte Methoden dar
<?php trait Hello { public function sayHelloWorld() { echo 'Hello'.$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; } } ?>
Traits statischeMitglieder
Traits können statisches Mitglied sein statische Methodendefinition.
StatischBeispiele für Variablen
<?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 ?>
Beispiele für statische Methoden
<?php trait StaticExample { public static function doSomething() { return 'Doing something'; } } class Example { use StaticExample; } Example::doSomething(); ?>
Beispiele für statische Variablen und statische Methoden
<?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 ?>
Trait kann auch Attribute definieren.
Beispiel für die Definition von Attributen
<?php trait PropertiesTrait { public $x = 1; } class PropertiesExample { use PropertiesTrait; } $example = new PropertiesExample; $example->x; ?>
Wenn ein Merkmal ein Attribut definiert, kann die Klasse kein Attribut mit demselben Namen definieren, andernfalls wird ein Fehler generiert. Wenn die Definition der Eigenschaft in der Klasse mit ihrer Definition im Merkmal kompatibel ist (gleiche Sichtbarkeit und gleicher Anfangswert), ist die Fehlerstufe E_STRICT, andernfalls handelt es sich um einen schwerwiegenden Fehler.
Beispiele für Konflikte
<?php trait PropertiesTrait { public $same = true; public $different = false; } class PropertiesExample { use PropertiesTrait; public $same = true; // Strict Standards public $different = true; // 致命错误 } ?>
Unterschiede in der Verwendung
Beispiele für unterschiedliche Verwendungen
<?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 } ?>
Die erste Verwendung ist die Verwendung für den Namensraum FooTest, Was gefunden wird, ist FooTest. Die zweite Verwendung besteht darin, ein Merkmal zu verwenden. Was gefunden wird, ist FooBarFooTest.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der statischen Mitglieder, abstrakten Mitglieder und Attributcodes von PHP-Merkmalen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!