Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der statischen Mitglieder, abstrakten Mitglieder und Attributcodes von PHP-Merkmalen

Detaillierte Erläuterung der statischen Mitglieder, abstrakten Mitglieder und Attributcodes von PHP-Merkmalen

伊谢尔伦
伊谢尔伦Original
2017-07-03 11:04:202466Durchsuche

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 &#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;
    }
}
?>

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 &#39;Doing something&#39;;
    }
}
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
?>

Attribute

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn