범위 확인 연산자 (::)
범위 확인 연산자(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는 부모 메서드를 호출하지 않습니다. 부모의 메서드가 호출되는지 여부는 확장 클래스에 달려 있습니다. 이는 생성자 및 소멸자, 오버로딩 및 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();
?>
정적 호출 속임수의 몇 가지 예도 참조하십시오.