Bei der objektorientierten PHP-Programmierung werden Sie immer auf
stoßenclass test{ public static function test(){ self::func(); static::func(); } public static function func(){} }
Aber kennen Sie den Unterschied zwischen Selbst und Statik?
Tatsächlich ist der Unterschied sehr einfach. Sie müssen nur ein paar Demos schreiben, um zu verstehen:
Demo für sich selbst:
class Car { public static function model(){ self::getModel(); } protected static function getModel(){ echo "This is a car model"; } }
Car::model();
Class Taxi extends Car { protected static function getModel(){ echo "This is a Taxi model"; } }
Taxi::model();
Ausgabe erhalten
This is a car model This is a car model
Sie können feststellen, dass self immer noch die Methode der übergeordneten Klasse in der Unterklasse aufruft
Demo für Statik
class Car { public static function model(){ static::getModel(); } protected static function getModel(){ echo "This is a car model"; } } Car::model(); Class Taxi extends Car { protected static function getModel(){ echo "This is a Taxi model"; } } Taxi::model();
Ausgabe erhalten
This is a car model This is a Taxi model
Sie können sehen, dass beim Aufrufen von static die Methode, die in der Methode der übergeordneten Klasse aufgerufen wird, immer noch die Methode der Unterklasse ist (so verwirrend ...), auch wenn die Unterklasse die Methode der übergeordneten Klasse aufruft.
Vor der PHP5.3-Version gab es noch einen kleinen Unterschied zwischen statisch und selbst. Was genau war das? Schließlich wurden sie alle von Version 7 dominiert. Ich werde es nicht mehr verstehen.
Die Zusammenfassung lautet: self kann nur auf Methoden in der aktuellen Klasse verweisen, und das Schlüsselwort static ermöglicht es Funktionen, Methoden in der Klasse zur Laufzeit dynamisch zu binden.