Wenn Sie self
auf ein Klassenmitglied verweisen, beziehen Sie sich auf die Klasse, in der Sie das Schlüsselwort verwenden. In diesem Fall Foo
definiert Ihre Klasse eine geschützte statische Eigenschaft namens $bar
. Wenn Sie self
in der Foo
Klasse auf die Eigenschaft verweisen, verweisen Sie auf dieselbe Klasse.
Wenn Sie also versuchen, eine andere Klasse self::$bar
in Ihrer Foo
Klasse zu verwenden, aber eine Bar
Klasse mit einem anderen Wert für die Eigenschaft haben, wird diese Foo::$bar
anstelle von verwendet Bar::$bar
, was möglicherweise nicht das ist, was Sie beabsichtigen:
class Foo
{
protected static $bar = 1234;
}
class Bar extends Foo
{
protected static $bar = 4321;
}
Wenn Sie eine Methode über aufrufen , rufenstatic
Sie eine Funktion auf, die als späte statische Bindungen bezeichnet wird (eingeführt in PHP 5.3).
Im obigen Szenario führt die Verwendung self
zu Foo::$bar
(1234). Und using static
führt zu Bar::$bar
(4321), da mit static
mit der Interpreter die Neudeklaration innerhalb der Bar
Klasse zur Laufzeit berücksichtigt wird .
Normalerweise verwenden Sie späte statische Bindungen für Methoden oder sogar die Klasse selbst anstelle von Eigenschaften, da Sie Eigenschaften in Unterklassen nicht häufig neu deklarieren. Ein Beispiel für die Verwendung des static
Schlüsselworts zum Aufrufen eines spät gebundenen Konstruktors finden Sie in dieser verwandten Frage: New self vs. new static
Dies schließt jedoch auch die Verwendung static
mit Eigenschaften nicht aus .