2011-08-26 7 views
1

나는 정적 인 방법을 생각하기 위해 자동적으로 '자기'를 볼 때. 최근에 나는 자기가 문맥에 의존한다는 지적을 받았다. 정적 메소드를 호출 할 수있는 '부모'와 같습니다. 다음 예제를 고려하십시오.자기의 문맥

error_reporting(-1); 

class A 
{ 
    public $var = 1; 

    public function __construct($n) 
    { 
     $this->var = $n; 

     self::foo(); 
    } 

    public function foo() 
    { 
     echo $this->var; 
    } 
} 

$obj = new A(5); 

오류없이 작동하고 foo $ this를 사용할 수 있습니다. 누군가가 자신과 부모가 전화를 어떻게 해결하는지 자세히 설명하는 가이드를 말할 수 있습니까?

+1

http://stackoverflow.com/questions/1948315/wheres-the-difference-between-self-and-this-in-a-php-class-or-php-method –

+0

나는 차이를 알고 self와 $ this 사이에, self가 직접 인스턴스를 참조하는 경우도 있습니다. – Federkun

+1

이 질문에 대한 두 번째 대답이 도움이 될 수 있습니다. http://stackoverflow.com/questions/151969/php-self-vs-this –

답변

2

$this $는 현재 개체에 대한 참조이며 self은 사용되는 클래스에 대한 참조입니다.

예 : 아래 코드의 결과는 (B::func)(A::func)입니다.

class A { 
    function call() { 
     $this->func(); 
     self::func(); 
    } 

    function func() { 
     echo '(A::func)'; 
    } 
} 

class B extends A { 
    function func() { 
     echo '(B::func)'; 
    } 
} 

$b = new B(); 
$b->call(); 
+0

예제는 이해하기 쉽습니다. – xdazz