스코프 해석 연산자
스코프 해석 연산자 (::)
이 페이지에서는 더블 콜론이라고도 불리는 스코프 해석 연산자(Paamayim Nekudotayim)로 클래스의 상수, static 프로퍼티, static 메서드에 접근하는 방법을 알아봐요.
본문
스코프 해석 연산자(Paamayim Nekudotayim, 또는 더 간단히 더블 콜론)는 클래스나 그 부모 중 하나의 상수(constant) , static 프로퍼티, static 메서드 에 접근할 수 있게 해 주는 토큰입니다. 게다가 static 프로퍼티나 메서드는 늦은 정적 바인딩(late static binding) 을 통해 오버라이드될 수 있어요.
클래스 정의 밖에서 이런 항목을 참조할 때는 클래스 이름을 사용합니다.
변수를 사용해서 클래스를 참조하는 것도 가능해요. 단, 변수의 값은 키워드(예: self, parent, static)가 될 수 없습니다.
Paamayim Nekudotayim이라는 이름은 처음에는 더블 콜론을 부르는 이상한 선택처럼 보일 수 있어요. 하지만 PHP 3을 구동하는 Zend Engine 0.5를 작성할 때, 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 MyClass {
const CONST_VALUE = 'A constant value';
}
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 and 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();
?>
정적 호출을 활용하는 몇 가지 기발한 예시도 함께 살펴보세요.