第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

PHP致命錯(cuò)誤:在沒有對(duì)象上下文時(shí)使用$this

PHP致命錯(cuò)誤:在沒有對(duì)象上下文時(shí)使用$this

PHP
森林海 2019-06-25 15:05:39
PHP致命錯(cuò)誤:在沒有對(duì)象上下文時(shí)使用$this我有個(gè)問題:我正在編寫一個(gè)沒有框架的新網(wǎng)絡(luò)應(yīng)用程序。在我的index.php我用的是:require_once('load.php');和在load.php我在用require_once('class.php');加載我的class.php.在我的class.php我有個(gè)錯(cuò)誤:致命錯(cuò)誤:在class.php中未在對(duì)象上下文中在線使用$this.(在本例中為11)舉個(gè)例子class.php是這樣寫的:class foobar {     public $foo;     public function __construct() {         global $foo;         $this->foo = $foo;     }     public function foobarfunc() {         return $this->foo();     }     public function foo() {         return $this->foo;     }}在我的index.php我可能在裝貨foobarfunc()就像這樣:foobar::foobarfunc();但也可以$foobar = new foobar;$foobar->foobarfunc();為什么會(huì)出現(xiàn)錯(cuò)誤?
查看完整描述

3 回答

?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

您正在調(diào)用一個(gè)非靜態(tài)方法:

public function foobarfunc() {
    return $this->foo();}

使用靜態(tài)調(diào)用:

foobar::foobarfunc();

使用靜態(tài)調(diào)用時(shí),將調(diào)用該函數(shù)。(即使沒有宣布為static),但是,由于沒有對(duì)象的實(shí)例,所以沒有$this.

因此:

  • 不應(yīng)對(duì)非靜態(tài)方法使用靜態(tài)調(diào)用。
  • 靜態(tài)方法(或靜態(tài)調(diào)用的方法)不能使用$this,它通常指向類的當(dāng)前實(shí)例,因?yàn)樵谑褂渺o態(tài)調(diào)用時(shí)沒有類實(shí)例。


在這里,類的方法使用類的當(dāng)前實(shí)例,因?yàn)樗鼈冃枰L問$foo類的屬性。

這意味著您的方法需要類的實(shí)例-這意味著它們不能是靜態(tài)的。

這意味著不應(yīng)該使用靜態(tài)調(diào)用:應(yīng)該實(shí)例化類,并使用對(duì)象調(diào)用方法,就像在代碼的最后一部分中所做的那樣:

$foobar = new foobar();$foobar->foobarfunc();


欲了解更多信息,請(qǐng)參閱PHP手冊(cè)中的內(nèi)容:


還請(qǐng)注意,您可能不需要在您的__construct方法:

global $foo;

使用global關(guān)鍵詞會(huì)使$foo變量,在所有函數(shù)和類的外部聲明,從該方法中提取.而且你可能沒有$foo變量。

訪問$foo 類屬性,您只需使用$this->foo就像你一樣。


查看完整回答
反對(duì) 回復(fù) 2019-06-25
?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊

如果您正在調(diào)用foobarfunc帶著分辨范圍算子 (::),那你就叫它靜態(tài),例如在類級(jí)別而不是實(shí)例級(jí)別上,因此使用$this不在對(duì)象上下文中時(shí)$this在類上下文中不存在。

如果您啟用E_STRICT,PHP將在以下方面引起注意:

Strict Standards: Non-static method foobar::foobarfunc() should not be called statically

代之而行

$fb = new foobar;echo $fb->foobarfunc();

在一個(gè)側(cè)面,我建議不要用global在你的教室里。如果您需要類內(nèi)的外部?jī)?nèi)容,請(qǐng)通過構(gòu)造函數(shù)傳遞它。這叫做依賴注入它將使您的代碼更易于維護(hù),更不依賴于外部事物。


查看完整回答
反對(duì) 回復(fù) 2019-06-25
  • 3 回答
  • 0 關(guān)注
  • 545 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)