2012-09-06 2 views
0

첫 번째 경우에는 객체 컨텍스트에서 함수를 호출했습니다. 두 번째 경우에는 클래스 컨텍스트가 있습니다. parent ::는 이처럼 작업하고 컨텍스트에 따라 동시에 작동합니까?parent ::는 클래스와 객체 호출 컨텍스트를 자동으로 결정합니까?

class par_parent{ 
    private $var='value1'; 
    private static $val='value2'; 
    public function call(){ 
     var_dump('Object '.$this->var); 
    } 
    public static function staticCall(){ 
     var_dump('Static '.self::$val); 
    } 
} 

class par_child extends par_parent{ 
    public function callObj(){ 
     parent::call(); 
    } 

    public static function callStatic(){ 
     parent::staticCall(); 
    } 
} 



$obj=new par_child(); 
$obj->callObj(); 
**//string 'Object value1' (length=13)** 
par_child::callStatic(); 
**//string 'Static value2' (length=13)** 
+0

PHP 문서 [여기] (http://php.net/manual/en/keyword.parent.php)를 참조하십시오. – Josh

+0

예,'parent ::'는 문맥에서 작동해야합니다. 문맥이 없으면 어떤 클래스가 부모인지 어떻게 알 수 있습니까? – nickb

+0

$ this-> 및 self ::를 동시에 클래스 및 개체 컨텍스트에서 parent : : 작업하는 방법에 대한 제 질문. 그리고 나는 워드 프로세서에서 대답을 찾지 못한다. – yurisnk

답변

0

parent:: 항상 본질적으로는 self:: 키워드처럼 작동하므로이 아니라이 호출 곳에서, 지혜로운 코드를 정의 된 컨텍스트를보고는 self:: 키워드처럼 바인더 제본된다. $this처럼 사용하려면 늦게 정적 바인딩을 사용하십시오. static::. 이 예제를 고려하십시오

class A { 
    protected static $v = 'a'; 
    public static function staticsay() { 
     print static::$v; 
    } 

} 
class B extends A { 
    protected static $v = 'b'; 
    public static function say(){ 
     print parent::$v; 
    } 
} 
class C extends B { 
    protected static $v = 'c'; 
    public static function selfsay(){ 
     print parent::$v; 
    } 
} 

C::say(); // prints 'a' 
C::selfsay(); // prints 'b' 
C::staticsay(); // prints 'c' 

가 여기에 우리가 Csay() 메소드를 호출 그래서 parent::A을 의미하고 A::$v가가를 인쇄 '는'그렇다의 IT 클래스 B에서 온다.

Cparent::은 클래스 B을 가리키며 $v은 'b'로 표시됩니다. PHP 5.3

늦게 정적 바인딩과 A::staticsay 클래스 C에서 $v를 볼 수 있도록 BASECLASSES 정적 메서드를 static 변수와 메소드에 액세스 할 수있는 static:: 키워드를 온다.

+0

하지만 부모에 대한 내 질문 : 그것은 $ this-> 또는 자기 같은 부모 클래스와 함께 작동 :: 또는 어쩌면 정적 같은 : 또는 다른 뭔가? – yurisnk

+0

오, 나는 완전히 그 요점을 놓쳤다. 대답을 다시하십시오. – complex857

관련 문제