update : 2015.11.03
php.shukuma.com

검색:
 
 
스코프 해결 연산자 (::)

스코프 해결 연산자 (::)

스코프 해결연산자(또는 Paamayim Nekudotayim 으로 불리는) 또는 간단한 용어로, 더블콜론은 static이나 constant와, 클래스의 재정의된 프로퍼티나 메서드에 접근할수 있도록 해주는 토큰입니다.

클래스 정의의 외부에서 이항목들을 참조할때, 클래스의 이름을 사용합니다.

PHP 5.3.0 이후로는, 값을 이용해서 클래스를 참조하는게 가능합니다. 변수의 값은 키워드여서는 안됩니다.(예를들면 self, parentstatic)

더블콜론이 Paamayim Nekudotayim 가 된것이 이상해 보일수 있습니다. 그렇지만, Zend Engine 0.5(PHP 3 엔진)를 작성하고 있는동안, Zend 팀은 그렇게 부르기로 했습니다. 이것은 더블콜론을 의미하는 히브리어 입니다!

Example #1 클래스 정의 외부에서 ::

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

$classname 'MyClass';
echo 
$classname::CONST_VALUE// As of PHP 5.3.0

echo MyClass::CONST_VALUE;
?>

다음 특별한 세가지 키워드 self, parentstatic 는 클래스 정의 내부에서 프로퍼티와 메서드에 접근하기 위해 사용됩니다.

Example #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';
echo 
$classname::doubleColon(); // As of PHP 5.3.0

OtherClass::doubleColon();
?>

부모 메서드의 정의를 재정의하여 확장할때, PHP 는 부모의 메서드를 호출하지 않습니다. 부모 메서드를 호출할지 안할지는 확장된 클래스에게 달려 있습니다. 이것은 생성자와 소멸자, 오버로딩, 매직 메서드 정의에도 적용됩니다.

Example #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();
?>

참고하세요. 정적 호출 트릭에 대한 예제.