범위 확인 연산자 (::)

범위 확인 연산자(Paamayim Nekudotayim이라고도 함) 또는 더 간단한 용어로 이중 콜론은 클래스의 정적, 상수 및 재정의된 속성 또는 메서드에 대한 접근을 허용하는 토큰입니다.

클래스 정의 외부에서 이러한 항목을 참조하는 경우 클래스 이름을 사용하십시오.

변수를 사용하여 클래스를 참조할 수 있습니다. 변수의 값은 키워드가 될 수 없습니다(예: self, parentstatic).

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, parentstatic은 클래스 정의 내부에서 속성 또는 메서드에 접근하는 데 사용됩니다.

예제 #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는 부모 메서드를 호출하지 않습니다. 부모의 메서드가 호출되는지 여부는 확장 클래스에 달려 있습니다. 이는 생성자 및 소멸자, 오버로딩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();
?>
                  
                

정적 호출 속임수의 몇 가지 예도 참조하십시오.