2012-09-06 49 views

回答

1

->執行實例的上下文中的方法,而::訪問一類的靜態上下文的方法。後者只能通過self::訪問該類的靜態成員,而前者也可以通過$this->使用實例成員。

0
a::b(); 

用於調用類(獨立於任何對象cotext的)的背景下靜態方法上面的語句從而$這不是在靜態方法可用

$c = new a; $c->b(); 

以上用於在對象($ c)的上下文中調用實例方法,因此$ this(參考對象$ c)在實例方法

內可用

謝謝

1

定義你的類時,你應該明確聲明你的屬性和方法的可見性,以及它們是否是靜態的。

在你的榜樣類應該是:

class A 
{ 
    public static function b() { 
     echo "abc"; 
    } 
} 

方法B()應該是靜態的,因爲它不涉及任何實例變量。要調用B(),需要使用:

A::b(); 

如果你的方法是使用一個實例變量(非靜態屬性)類可能會是這樣的:

class Foo 
{ 
    private $bar; // non static instance variable 

    public function __construct($bar) { 
     $this->bar = $bar; // instance variable set in the constructor 
    } 

    public function baz() { 
     echo $this->bar; // instance variable referred to in the non-static method 
    } 
} 

,那麼你會打電話這樣的功能:

$x = new Foo('abc'); 
$x->baz(); 
+0

謝謝你哥們 –