久久无码中文字幕_日韩精品无码一本二本三_久久精品呦女暗网_欧美一级夜夜爽_久久精品国产99久久99久久久

17
2024/05

PHP調(diào)用類里面的方法的時(shí)候報(bào)錯(cuò)Using $this when not in object context是什么原因

發(fā)布時(shí)間:2024-05-17 13:46:03
發(fā)布者:已經(jīng)寫(xiě)了
瀏覽量:
0

最近在開(kāi)發(fā)新的建站系統(tǒng)的時(shí)候,使用PHP寫(xiě)代碼的時(shí)候報(bào)錯(cuò)Using $this when not in object context是什么原因呢,大概的解釋一下就是$this在靜態(tài)方法中使用了,聽(tīng)起來(lái)似懂非懂的樣子,下面就稍微詳細(xì)的解釋一下原因,和處理方式吧。

首先介紹一下靜態(tài)方法和非靜態(tài)方法的區(qū)別和使用方式:

1、實(shí)例化要求:

    非靜態(tài)方法:必須先實(shí)例化,然后通過(guò)該實(shí)例來(lái)調(diào)用非靜態(tài)方法。

    靜態(tài)方法:不需要?jiǎng)?chuàng)建類的實(shí)例,可以直接通過(guò)類名來(lái)調(diào)用靜態(tài)方法。

2、$this 關(guān)鍵字

    非靜態(tài)方法:可以使用 $this 關(guān)鍵字來(lái)引用當(dāng)前對(duì)象實(shí)例,訪問(wèn)其屬性和調(diào)用其方法。

    靜態(tài)方法:不能使用 $this 關(guān)鍵字,因?yàn)殪o態(tài)方法不與任何特定的對(duì)象實(shí)例關(guān)聯(lián)。(這就是報(bào)錯(cuò)的真實(shí)原因)

3、繼承與覆蓋:

    非靜態(tài)方法:子類可以覆蓋父類的非靜態(tài)方法。當(dāng)通過(guò)子類實(shí)例調(diào)用被覆蓋的方法時(shí),將執(zhí)行子類中的方法(多態(tài)性)。

    靜態(tài)方法:子類也可以覆蓋父類的靜態(tài)方法,但行為略有不同。通過(guò)子類名調(diào)用靜態(tài)方法將執(zhí)行子類中的方法,但通過(guò)父類名調(diào)用將仍然執(zhí)行父類中的方法(除非在子類中使用 parent:: 顯式調(diào)用父類的靜態(tài)方法)。

在稍微細(xì)講一下實(shí)例化調(diào)用:

1、實(shí)例化調(diào)用與靜態(tài)調(diào)用:

image

2、訪問(wèn)屬性:

    實(shí)例化對(duì)象可以訪問(wèn)和修改其非靜態(tài)屬性(包括私有、受保護(hù)和公共屬性)。

    靜態(tài)方法不能直接訪問(wèn)非靜態(tài)屬性,因?yàn)樗鼈兣c任何特定的對(duì)象實(shí)例都不關(guān)聯(lián)。但是,它們可以訪問(wèn)靜態(tài)屬性。

3、$this:

    在非靜態(tài)方法中,你可以使用 $this 關(guān)鍵字來(lái)引用當(dāng)前對(duì)象實(shí)例。

    靜態(tài)方法中不能使用 $this 關(guān)鍵字,因?yàn)樗鼈儾慌c任何特定的對(duì)象實(shí)例關(guān)聯(lián)。

4、繼承

    如果子類覆蓋了父類的非靜態(tài)方法,那么當(dāng)你通過(guò)子類實(shí)例調(diào)用該方法時(shí),將執(zhí)行子類中的方法(多態(tài)性)。

    如果子類覆蓋了父類的靜態(tài)方法,那么通過(guò)子類名調(diào)用該方法將執(zhí)行子類中的方法,但通過(guò)父類名調(diào)用將仍然執(zhí)行父類中的方法。

結(jié)論:報(bào)錯(cuò)Using $this when not in object context 的兩種解決方式

1、先實(shí)例化,在調(diào)用方法

2、修改類中的$this調(diào)用改為self::調(diào)用

關(guān)鍵詞:
返回列表