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 '
最後一句話報錯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 '
最後一句話報錯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
看錯了
下面是原答案
private 表示是私有的,只允許類別內部訪問,即使是繼承的類別也不行。
如果允許被繼承訪問,不想被外部訪問,可以改成:protected。
另外,創建的是那個類別的實例,$this就代表哪個類別。