Områdeslösningsoperator (::)
Scope Resolution Operator (::) ¶
Scope Resolution Operator (även kallad Paamayim Nekudotayim) eller, i enklare termer, dubbelkolon, är en token som tillåter åtkomst till en konstant, statisk egenskap eller statisk metod i en klass eller en av dess föräldrar. Dessutom kan statiska egenskaper eller metoder åsidosättas via "late static binding".
När dessa objekt refereras från utanför klassdefinitionen, används namnet på klassen.
Det är möjligt att referera till klassen med en variabel. Variabelns värde kan inte vara ett nyckelord (t.ex. self, parent och static).
Paamayim Nekudotayim skulle vid första anblicken verka som ett märkligt val för att namnge en dubbelkolon. Men när Zend Engine 0.5 (som driver PHP 3) skrevs, bestämde sig Zend-teamet för att kalla den det. Det betyder faktiskt dubbelkolon - på hebreiska!
Exempel #1 :: från utanför klassdefinitionen
<?php class MyClass { const CONST_VALUE = 'Ett konstant värde'; } $classname = 'MyClass'; echo $classname::CONST_VALUE; echo MyClass::CONST_VALUE; ?>
Tre speciella nyckelord, self, parent och static, används för att komma åt egenskaper eller metoder inifrån klassdefinitionen.
Exempel #2 :: från inuti klassdefinitionen
<?php class OtherClass extends MyClass { public static $my_static = 'statisk var'; public static function doubleColon() { echo parent::CONST_VALUE . "\n"; echo self::$my_static . "\n"; } } $classname = 'OtherClass'; $classname::doubleColon(); OtherClass::doubleColon(); ?>
När en underklass åsidosätter förälderns definition av en metod, kommer PHP inte att anropa förälderns metod. Det är upp till underklassen om förälderns metod ska anropas eller inte. Detta gäller även för Konstruktörer och Destruktörer, Overloading, och Magic-metoddefinitioner.
Exempel #3 Anropa en förälders metod
<?php class MyClass { protected function myFunc() { echo "MyClass::myFunc()\n"; } } class OtherClass extends MyClass { // Åsidosätt förälderns definition public function myFunc() { // Men anropa fortfarande förälderns funktion parent::myFunc(); echo "OtherClass::myFunc()\n"; } } $class = new OtherClass(); $class->myFunc(); ?>
Sidslut
Orginalhemsidan på Engelska :
PHP
Språkreferens
Språkreferens#Klasser_och_Objekt