범위 확인 연산자(Paamayim Nekudotayim이라고도 함) 또는 간단히 콜론 쌍을 사용하여 정적 멤버, 클래스 상수에 액세스할 수 있으며 클래스의 속성 및 메서드를 재정의하는 데에도 사용할 수 있습니다.
클래스 정의 외부에서 이러한 항목을 참조할 때는 클래스 이름을 사용하세요.
PHP 5.3.0부터 클래스는 변수를 통해 참조할 수 있으며, 변수의 값은 키워드(self, parent, static 등)가 될 수 없습니다.
이중 콜론 연산자의 이름을 Paamayim Nekudotayim으로 선택한 것은 조금 이상한 것 같습니다. 그러나 이는 Zend 엔진 0.5(PHP 3에서 사용됨)를 작성할 때 Zend 개발팀이 내린 결정이었습니다. 사실 히브리어로 이 단어는 이중 콜론을 의미합니다.
예제 #1 클래스 외부에서 :: 연산자 사용
class MyClass { const CONST_VALUE = 1; } $classname = 'MyClass'; echo $classname::CONST_VALUE; //自PHP5.3.0起 echo MyClass::CONST_VALUE;
세 가지 특수 키워드 self, parent 및 static은 클래스 정의 또는 액세스할 메서드 내부 속성을 지정하는 데 사용됩니다.
예제 #2 클래스 정의 내에서 사용:
function __autoload($classname){ require_once($classname.".php"); } class OtherClass extends MyClass { public static $my_static = 1; public static function doubleColon(){ echo parent::CONST_VALUE.'<br>'; echo self::$my_static,'<br>'; } } $classname = 'OtherClass'; echo $classname::doubleColon(); OtherClass::doubleColon();
하위 클래스가 상위 클래스의 메서드를 재정의하면 PHP는 상위 클래스의 재정의된 메서드를 호출하지 않습니다. 상위 클래스의 메소드 호출 여부는 하위 클래스에 따라 다릅니다. 이 메커니즘은 생성자, 소멸자, 오버로딩 및 매직 메서드에서도 작동합니다.
예제 #3 상위 클래스의 메서드 호출
class MyClass { protected function myFunc() { echo 'MyClass::myFunc()<br>'; } } class OtherClass extends MyClass { //覆盖了父类的定义 public function myFunc() { //但还是可以调用父类中被覆盖的方法 parent::myFunc(); echo 'OtherClass::myFunc()<br>'; } } $class = new OtherClass(); $class -> myFunc();
출력 결과:
MyClass::myFunc()
OtherClass::myFunc ()