Die späte statische Bindung funktioniert durch Speichern des Klassennamens aus dem vorherigen „nicht weitergeleiteten Aufruf“ (non-forwarding call
).
Bei einem statischen Methodenaufruf ist der Klassenname der explizit angegebene (normalerweise auf der linken Seite des ::-Operators); 🎜>
Bei einem nicht statischen Methodenaufruf ist es die Klasse, zu der das Objekt gehört.,,
forwarding call
undself::
. Sie können die Funktionparent::
verwenden, um den Klassennamen der aufgerufenen Methode abzurufen undstatic::
auf deren Gültigkeitsbereich hinzuweisen. Einschränkungen vonforward_static_call()
get_called_class()
static::
self::
für einen statischen Verweis auf die aktuelle Klasse, abhängig von der Klasse, in der sich die aktuelle Methode befindet definiert:
self::
__CLASS__
Beispiel:
Ergebnis:
class A { public static function who () { echo __CLASS__ ; } public static function test () { self :: who (); } }class B extends A { public static function who () { echo __CLASS__ ; } } B :: test ();
statisch (späte statische Bindung)
A
static
Beispiel:
Ergebnis:
<?phpclass A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 后期静态绑定从这里开始 } }class B extends A { public static function who() { echo __CLASS__; } } B::test();?>
Der Unterschied zwischen static und $this
B
zu unterschiedlichen Ergebnissen führen. Ein weiterer Unterschied besteht darin, dass statische Eigenschaften nur mitaufgerufen werden können.
$this->
static::
static::
Beispiel: Private Methode anrufen
Ergebnis:
<?phpclass A { private function foo() { echo "success!\n"; } public function test() { $this->foo(); static::foo(); } }class B extends A { /* foo() will be copied to B, hence its scope will still be A and * the call be successful */}class C extends A { private function foo() { /* original method is replaced; the scope of the new one is C */ } }$b = new B();$b->test();$c = new C();$c->test(); //fails
Weitergeleitete und nicht weitergeleitete Anrufe
success! success! success! Fatal error: Call to private method C::foo() from context 'A' in /tmp/test.php on line 9
getätigt wird, werden die Anrufinformationen weitergeleitet.
parent::
self::
Beispiel:
Ergebnis:
class A { public static function foo() { static::who(); } public static function who() { echo __CLASS__."\n"; } }class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } public static function who() { echo __CLASS__."\n"; } }class C extends B { public static function who() { echo __CLASS__."\n"; } } C::test();
Verwandte Empfehlungen:
ACC
PHP-Beispiel für späte statische Bindung
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Beispiele für die späte statische PHP-Bindung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!