2011-08-26 26 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 $這是可用的。 有人可以告訴我一些指導,詳細解釋如何通過自己和家長解決電話?

+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