首頁  >  文章  >  後端開發  >  php 靜態函數中$this的問題

php 靜態函數中$this的問題

WBOY
WBOY原創
2016-10-24 00:12:421634瀏覽

class A{

<code>    public $age = 50;
    private $money = 2000;
    static public $head = 1;
    public function tell(){
            echo $this->age,'<br />';
            echo self::$head,'<br />';
    }
    static public function sayMoney(){
            echo $this->money,'<br />';
    }</code>

}
class B extends A{

<code>    public $age = 22;
    private $money = 10;
    public function subtell(){
            parent::tell();
            echo $this->age,'<br />';
    }
    public function subMoney()
    {
            parent::sayMoney();
            echo $this->money,'<br />';

    }</code>

}

$b = new B();
$b->subtell();//22 1 22;

echo '


';
$b->subMoney();

最後一句話報錯Using $this when not in object context
但在呼叫subMoney()時不就綁定了$this,$this指向b對象,之後執行parent ::sayMoney();由於靜態調用,所以不綁定$this.在sayMoney()執行的時候不應該得到2000嗎,為什麼會報錯,和前面$b->subtell();調用有啥不一樣

回覆內容:

class A{

<code>    public $age = 50;
    private $money = 2000;
    static public $head = 1;
    public function tell(){
            echo $this->age,'<br />';
            echo self::$head,'<br />';
    }
    static public function sayMoney(){
            echo $this->money,'<br />';
    }</code>

}
class B extends A{

<code>    public $age = 22;
    private $money = 10;
    public function subtell(){
            parent::tell();
            echo $this->age,'<br />';
    }
    public function subMoney()
    {
            parent::sayMoney();
            echo $this->money,'<br />';

    }</code>

}

$b = new B();
$b->subtell();//22 1 22;

echo '


';
$b->subMoney();

最後一句話報錯Using $this when not in object context
但在呼叫subMoney()時不就綁定了$this,$this指向b對象,之後執行parent ::sayMoney();由於靜態調用,所以不綁定$this.在sayMoney()執行的時候不應該得到2000嗎,為什麼會報錯,和前面$b->subtell();調用有啥不一樣

靜態方法內不能使用this, 靜態屬性和方法被創建時,可能還沒有任何這個類別的實例可以被調用, 你可以classA::staticMethod()$a = new classA(); $a->staticMethod() , 但其內部就是不能使用this

看錯了

樓上說的對,第二個調用的 function 用了 static,就不能用 $this了

下面是原答案

private 表示是私有的,只允許類別內部訪問,即使是繼承的類別也不行。

如果允許被繼承訪問,不想被外部訪問,可以改成:protected。

另外,創建的是那個類別的實例,$this就代表哪個類別。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn