php 靜態函數中$this的問題
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就代表哪個類別。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲
