Gültigkeitsbereichsoperator (::)
Der Gültigkeitsbereichsoperator (auch Paamayim Nekudotayim genannt) oder
in einfacheren Worten der Doppel-Doppelpunkt ist ein Kürzel, das Zugriff
auf statische,
konstante und überschriebene
Member oder Methoden einer Klasse erlaubt.
Wenn Sie diese Elemente außerhalb der Klassendefinition ansprechen, benutzen
Sie den Namen der Klasse.
Beginnend mit PHP 5.3.0 ist es möglich, eine Variable als Klassenreferenz
zu nutzen. Der Variablenwert kann 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; // Ab PHP 5.3.0
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(); // Ab PHP 5.3.0
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.