Операторът за област на действие (също така, познат като Paamayim Nekudotayim) или просто двойно двоеточие, е символ, който предоставя достъп до статични и повторно-дефинирани свойства и методи на даден клас и константи.
Когато се обръщате към тези полета извън дефиницията на съответния клас, използвайте името на класа.
От PHP 5.3.0 е възможно да се обърнете към клас посредством променлива. Стойността на променливата не може да бъде ключова дума (напр. self, parent и static не са позволени при динамичните референции към класове.
В началото Paamayim Nekudotayim може да ви се стори доста странен избор за име на двойното двоеточие. Докато се пишеше Zend Engine 0.5 (който е в основата на PHP 3), екипът на Zend реши да го кръсти така. Всъщност, това означава двойно двоеточие на иврит.
Example #1 :: извън дефиниция на клас
<?php
class MyClass {
const CONST_VALUE = 'Стойност на константата';
}
$classname = 'MyClass';
echo $classname::CONST_VALUE; // От PHP 5.3.0
echo MyClass::CONST_VALUE;
?>
Съществуват две специални ключови думи - self и parent, които се използват за достъп до свойства или методи вътре в дефиницията на класа.
Example #2 :: в дефиниция на клас
<?php
class OtherClass extends MyClass
{
public static $my_static = 'статична променлива';
public static function doubleColon() {
echo parent::CONST_VALUE . "\n";
echo self::$my_static . "\n";
}
}
$classname = 'OtherClass';
echo $classname::doubleColon(); // От PHP 5.3.0
OtherClass::doubleColon();
?>
Когато в дъщерен клас се дефинира повторно метод от родителски клас, PHP няма да извика родителския метод. Това дали да се извика родителския метод или не, се решава от дъщерния клас. Същото важи и за дефинициите на Конструкторите и деструкторите, Повторно-дефинираните и Вълшебните методи.
Example #3 Извикване на метод на родителски клас
<?php
class MyClass
{
protected function myFunc() {
echo "MyClass::myFunc()\n";
}
}
class OtherClass extends MyClass
{
// Повторно дефиниране на метод на родителския клас
public function myFunc()
{
// Извикване на метода на родителския клас
parent::myFunc();
echo "OtherClass::myFunc()\n";
}
}
$class = new OtherClass();
$class->myFunc();
?>