Der Bereichsauflösungsoperator (auch bekannt als Paamayim Nekudotayim) oder einfacher ein Doppelpunktpaar kann für den Zugriff auf statische Elemente und Klassenkonstanten verwendet werden und kann auch zum Überschreiben von Eigenschaften und Methoden in einer Klasse verwendet werden.
Wenn Sie auf diese Elemente außerhalb der Klassendefinition verweisen, verwenden Sie den Klassennamen.
Seit PHP 5.3.0 können Klassen über Variablen referenziert werden, und der Wert der Variablen darf kein Schlüsselwort sein (wie self, parent und static).
Die Wahl von Paamayim Nekudotayim als Name des Doppelpunktoperators erscheint etwas seltsam. Dies war jedoch eine Entscheidung des Zend-Entwicklungsteams beim Schreiben der Zend Engine 0.5 (verwendet in PHP 3). Tatsächlich bedeutet dieses Wort im Hebräischen Doppelpunkt.
Beispiel #1 Verwenden Sie den ::-Operator außerhalb der Klasse
class MyClass { const CONST_VALUE = 1; } $classname = 'MyClass'; echo $classname::CONST_VALUE; //自PHP5.3.0起 echo MyClass::CONST_VALUE;
Die drei speziellen Schlüsselwörter self, parent und static werden verwendet, um Eigenschaften innerhalb der Klassendefinition oder Methode zuzuordnen.
Beispiel #2 Verwendung innerhalb einer Klassendefinition::
function __autoload($classname){ require_once($classname.".php"); } class OtherClass extends MyClass { public static $my_static = 1; public static function doubleColon(){ echo parent::CONST_VALUE.'<br>'; echo self::$my_static,'<br>'; } } $classname = 'OtherClass'; echo $classname::doubleColon(); OtherClass::doubleColon();
Wenn eine Unterklasse eine Methode in ihrer übergeordneten Klasse überschreibt, ruft PHP die überschriebene Methode in der übergeordneten Klasse nicht auf. Ob die Methode der übergeordneten Klasse aufgerufen wird, hängt von der untergeordneten Klasse ab. Dieser Mechanismus funktioniert auch mit Konstruktoren und Destruktoren, Überladung und magischen Methoden.
Beispiel #3 Rufen Sie die Methode der übergeordneten Klasse auf
class MyClass { protected function myFunc() { echo 'MyClass::myFunc()<br>'; } } class OtherClass extends MyClass { //覆盖了父类的定义 public function myFunc() { //但还是可以调用父类中被覆盖的方法 parent::myFunc(); echo 'OtherClass::myFunc()<br>'; } } $class = new OtherClass(); $class -> myFunc();
Ausgabeergebnis:
MyClass::myFunc()
OtherClass::myFunc ()