Gültigkeitsbereichsoperator (::)
Der Gültigkeitsbereichsoperator (auch Paamayim Nekudotayim genannt) oder
einfacher ausgedrückt, der Doppel-Doppelpunkt, ist ein Kürzel, das den
Zugriff auf eine Konstante,
eine statische Eigenschaft oder
eine statische Methode einer
Klasse oder einer ihrer Eltern erlaubt. Außerdem können statische
Eigenschaften oder Methoden durch
späte statische Bindung
überschrieben werden.
Wenn Sie diese Elemente außerhalb der Klassendefinition ansprechen, benutzen
Sie den Namen der Klasse.
Es ist möglich, eine Variable als Klassenreferenz zu nutzen. Der
Variablenwert darf kein Schlüsselwort (wie self
,
parent
oder static
) sein.
Paamayim Nekudotayim scheint auf den ersten Blick eine eigenartige Wahl
für die Benennung eines Doppel-Doppelpunktes zu sein. Jedoch entschied sich
das Zend Team ihn so zu nennen, während sie die Zend Engine 0.5 schrieben
(welche PHP 3 antreibt). Tatsächlich bedeutet das Doppel-Doppelpunkt -
in Hebräisch.
Beispiel #1 :: außerhalb der Klassendefinition
<?php
class MyClass {
const CONST_VALUE = 'Ein konstanter Wert';
}
$classname = 'MyClass';
echo $classname::CONST_VALUE;
echo MyClass::CONST_VALUE;
?>
Die drei speziellen Schlüsselwörter self,
parent und static werden benutzt, um
auf Member und Methoden von innerhalb der Klassendefinition zuzugreifen.
Beispiel #2 :: innerhalb der Klassendefinition
<?php
class OtherClass extends MyClass
{
public static $my_static = 'statische var';
public static function doubleColon() {
echo parent::CONST_VALUE . "\n";
echo self::$my_static . "\n";
}
}
$classname = 'OtherClass';
$classname::doubleColon();
OtherClass::doubleColon();
?>
Wenn eine abgeleitete Klasse die Definition der Methode eines Vaters
überschreibt, wird PHP die Methode des Vaters nicht aufrufen. Es obliegt
der abgeleiteten Klasse, ob die Methode der Vaterklasse aufgerufen wird
oder nicht. Dies gilt ebenfalls für
Konstruktoren und Destruktoren,
Überladung und
magische Methodendefinitionen.
Beispiel #3 Eine Vatermethode aufrufen
<?php
class MyClass
{
protected function myFunc() {
echo "MyClass::myFunc()\n";
}
}
class OtherClass extends MyClass
{
// Die Definition des Vaters überschreiben
public function myFunc()
{
// Aber dennoch die Funktion des Vaters aufrufen
parent::myFunc();
echo "OtherClass::myFunc()\n";
}
}
$class = new OtherClass();
$class->myFunc();
?>
Siehe auch ein Beispiel
zur Bedeutung von $this
, wenn nicht-statische Methoden
statisch aufgerufen werden.