PHP 스코프 연산자(::)

PHP/매뉴얼 번역 2008/06/19 17:59
스코프 연산자(::) Scope Resolution Operator (::)

스코프정의연산자 (Paamayim Nekudotayim 라고도 함) , 그냥 보이는 대로 부르면  더블콜론은 static, 정수(constant ) 그리고 오버라이드된 클래스의 멤버 , 메소드 에 접근 할 수 있도록 하는 토큰중에 하나이다. 
위의 아이템들을 클래스정의의 외부에서 참조할때 클래스의 이름을 사용하도록 한다.
 
PHP 5.3.0 이후부터는 변수를 이용하여 클래스를 참조할 수 있다. 변수의 값은 키워드를 지정할수 없다.  (예를 들어 self  또는  parentstatic 같은 ...)
왜 더블콜론에 Paamayim Nekudotayim 라는 이름을 붙였을까 ?
Zend Engine 0.5 (PHP 3 의 엔진) 을 작성할때 Zend 팀은 더블콜론의 이름을 이렇게 정하였다. 실은 더블콜론을 의미하는 히브루(Hebrew)어라고...
 
클래스정의 외부에서의 예

<?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 parent 가 클래스정의의 내부에서 멤버 또는 메소드를 억세스할때 사용된다.

클래스정의 내부에서의 예

<?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 는 부모클래스의 메소드를 호출하지 않는다. 부모클래스의 메소드를 호출할지 말지는 확장된 클래스에서 결정할 일이다. 컨스트럭터 및 디스트럭터 , 오버로드 그리고 매직메소드의 정의에도 적용된다.


부모클래스의 메소드 호출예

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

원문링크 : http://www.php.net/manual/ja/language.oop5.paamayim-nekudotayim.php

목차에
PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5

'PHP > 매뉴얼 번역' 카테고리의 다른 글

PHP 오버로드  (0) 2008/06/20
PHP 오브젝트 인터페이스  (0) 2008/06/20
PHP 클래스의 추상화  (0) 2008/06/19
PHP 클래스 정수  (0) 2008/06/19
PHP static 키워드  (0) 2008/06/19
PHP 스코프 연산자(::)  (0) 2008/06/19
PHP 억세스권(접근권한) : Visibility  (0) 2008/06/19
PHP 컨스트럭터와 디스트럭터  (0) 2008/06/19
PHP 오브젝트의 오토로딩  (0) 2008/06/19
PHP 클래스의 기초  (0) 2008/06/19
PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5  (0) 2008/06/19
Trackback 0 : Comment 0