摘要:則上面的基礎(chǔ)上,更聰明一點(diǎn)點(diǎn)會(huì)返回執(zhí)行的類(lèi),比如執(zhí)行返回的是執(zhí)行返回的是而在沒(méi)有繼承的情況下,可以認(rèn)為和是返回相同的結(jié)果。
最近在一個(gè)視頻的評(píng)論被問(wèn)到一個(gè)小問(wèn)題:這里選擇用static 而不是self有特殊的考慮么?或者我們可以這樣轉(zhuǎn)換一下問(wèn)題:
PHP 的 new static 和 new self 具體有什么?
視頻地址 https://www.codecasts.com/ser...
其實(shí)這個(gè)來(lái)看一個(gè)例子應(yīng)該就很清晰了:
class Father { public static function getSelf() { return new self(); } public static function getStatic() { return new static(); } } class Son extends Father {} echo get_class(Son::getSelf()); // Father echo get_class(Son::getStatic()); // Son echo get_class(Father::getSelf()); // Father echo get_class(Father::getStatic()); // Father
這里面注意這一行 get_class(Son::getStatic()); 返回的是 Son 這個(gè) class,可以總結(jié)如下:
new self1.self 返回的是 new self 中關(guān)鍵字 new 所在的類(lèi)中,比如這里例子的 :
public static function getSelf() { return new self(); // new 關(guān)鍵字在 Father 這里 }
始終返回 Father。
new static2.static 則上面的基礎(chǔ)上,更聰明一點(diǎn)點(diǎn):static 會(huì)返回執(zhí)行 new static() 的類(lèi),比如 Son 執(zhí)行 get_class(Son::getStatic()) 返回的是 Son, Father 執(zhí)行 get_class(Father::getStatic()) 返回的是 Father
而在沒(méi)有繼承的情況下,可以認(rèn)為 new self 和 new static是返回相同的結(jié)果。
Tips: 可以用一個(gè)好的 IDE 來(lái)直接看注釋。比如 PhpStorm:
Happy Hacking
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22389.html
摘要:首先闡明結(jié)論,在中指向定義了當(dāng)前被調(diào)用方法的類(lèi),指向調(diào)用當(dāng)前靜態(tài)方法的類(lèi)。下面的例子更好的說(shuō)明了和之間的差異后者使用了的后期靜態(tài)綁定指向調(diào)用方法的當(dāng)前類(lèi) 首先闡明結(jié)論,在PHP中 self指向定義了當(dāng)前被調(diào)用方法的類(lèi), static指向調(diào)用當(dāng)前靜態(tài)方法的類(lèi)。 接下來(lái)通過(guò)一個(gè)例子來(lái)證明上面的結(jié)果 class A { public static $_a = Class A; ...
摘要:有了的靜態(tài)延遲綁定功能,可以在運(yùn)行時(shí)動(dòng)態(tài)確定歸屬的類(lèi)。與是被討論最多,也是最容易引起誤用的組合。的用途看完與上述三個(gè)關(guān)鍵字的區(qū)別,的用途是不是呼之即出一句話總結(jié),那就是總是指向當(dāng)前類(lèi)及類(lèi)實(shí)例。 轉(zhuǎn)載請(qǐng)注明文章出處:https://tlanyan.me/self-in-php/ PHP群里有人詢問(wèn)self關(guān)鍵字的用法,答案是比較明顯的:靜態(tài)成員函數(shù)內(nèi)不能用this調(diào)用非成員函數(shù),但可以用...
摘要:的設(shè)計(jì)模式有很多種,本文取最簡(jiǎn)單的三種模式工廠模式單例模式和注冊(cè)樹(shù)模式進(jìn)行簡(jiǎn)單的講解。文件創(chuàng)建完后,咱們回到單元測(cè)試文件文件再執(zhí)行一下單元測(cè)試命令發(fā)現(xiàn),也能返回成功,這樣的話我們就能很方便的修改任何驅(qū)動(dòng)了。 php 設(shè)計(jì)模式之工廠模式、單例模式、注冊(cè)樹(shù)模式 在軟件工程中,創(chuàng)建型設(shè)計(jì)模式承擔(dān)著對(duì)象創(chuàng)建的職責(zé),嘗試創(chuàng)建適合程序上下文的對(duì)象,對(duì)象創(chuàng)建設(shè)計(jì)模式的產(chǎn)生是由于軟件工程設(shè)計(jì)的問(wèn)題,具...
摘要:靜態(tài)方法和屬性靜態(tài)方法是以類(lèi)作為作用域的函數(shù)。靜態(tài)方法不能訪問(wèn)這個(gè)類(lèi)中的普通屬性,因?yàn)槟切傩詫儆谝粋€(gè)對(duì)象,但可以訪問(wèn)靜態(tài)屬性。因此靜態(tài)方法和屬性又被稱為類(lèi)變量和屬性,也就不能在靜態(tài)方法中使用偽變量。引入了延遲靜態(tài)綁定的概念。 靜態(tài)方法和屬性 靜態(tài)方法是以類(lèi)作為作用域的函數(shù)。靜態(tài)方法不能訪問(wèn)這個(gè)類(lèi)中的普通屬性,因?yàn)槟切傩詫儆谝粋€(gè)對(duì)象,但可以訪問(wèn)靜態(tài)屬性。如果修改了一個(gè)靜態(tài)屬性,那么這...
摘要:接口可以使用常量,叫接口常量,和類(lèi)的常量使用方法相同類(lèi)可以同時(shí)繼承多個(gè)接口使用接口常量抽象類(lèi)不能被實(shí)例化。繼承抽象類(lèi),子類(lèi)必須實(shí)現(xiàn)父類(lèi)中所有的抽象方法。 訪問(wèn)控制 屬性和方法的訪問(wèn)控制(可見(jiàn)標(biāo)識(shí)):public 任何地方private 類(lèi)自身protected 類(lèi)自身,自子類(lèi)及自父類(lèi) this this 可以理解為這個(gè)類(lèi)的一個(gè)實(shí)例 self self 代表類(lèi)本身 __construc...
閱讀 925·2021-11-25 09:43
閱讀 1298·2021-11-17 09:33
閱讀 3015·2019-08-30 15:44
閱讀 3314·2019-08-29 17:16
閱讀 484·2019-08-28 18:20
閱讀 1642·2019-08-26 13:54
閱讀 557·2019-08-26 12:14
閱讀 2176·2019-08-26 12:14