Оператор разрешения области действия (также называемый Paamayim Nekudotayim) или, проще говоря, двойное двоеточие — это токен, который позволяет получить доступ к статическим , постоянным и переопределенным свойствам или методам класса.

При обращении к этим элементам из-за пределов определения класса используйте имя класса.

Можно ссылаться на класс, используя переменную. Значение переменной не может быть ключевым словом (например self, parentи static).

Paamayim Nekudotayim поначалу может показаться странным выбором для обозначения двойного двоеточия. Однако при написании Zend Engine 0.5 (на котором работает PHP 3) команда Zend решила назвать его именно так. На самом деле это означает двойное двоеточие — на иврите!

Пример #1 :: из-за пределов определения класса

<?php
class MyClass {
    const CONST_VALUE = 'A constant value';
}

$classname = 'MyClass';
echo $classname::CONST_VALUE;

echo MyClass::CONST_VALUE;
?>

Три специальных ключевых слова self , parent и static используются для доступа к свойствам или методам из определения класса.

Пример #2 :: изнутри определения класса

<?php
class OtherClass extends MyClass
{
    public static $my_static = 'static var';

    public static function doubleColon() {
        echo parent::CONST_VALUE . "\n";
        echo self::$my_static . "\n";
    }
}

$classname = 'OtherClass';
$classname::doubleColon();

OtherClass::doubleColon();
?>

Когда расширяющий класс переопределяет родительское определение метода, PHP не будет вызывать родительский метод. От расширенного класса зависит, вызывается ли родительский метод. Это также относится к определениям Constructors и Destructors , Overloading и Magic .

Пример #3 Вызов родительского метода

<?php
class MyClass
{
    protected function myFunc() {
        echo "MyClass::myFunc()\n";
    }
}

class OtherClass extends MyClass
{
    // Override parent's definition
    public function myFunc()
    {
        // But still call the parent function
        parent::myFunc();
        echo "OtherClass::myFunc()\n";
    }
}

$class = new OtherClass();
$class->myFunc();
?>