本篇文章主要介紹了淺談PHP中new self()和new static()的區別,具有一定的參考價值,有興趣的可以了解一下
#1.new static()是在PHP5.3版本中引入的新特性。
2.無論是new static()還是new self(),都是new了一個新的物件。
3.這兩個方法new出來的物件有什麼差別呢,說白了就是new出來的到底是同一個類別實例還是不同的類別實例呢?
為了探究上面的問題,我們先上一段簡單的程式碼:
class Father { public function getNewFather() { return new self(); } public function getNewCaller() { return new static(); } } $f = new Father(); print get_class($f->getNewFather()); print get_class($f->getNewCaller());
注意,上面的程式碼get_class()方法是用於取得實例所屬的類別名稱。
這裡的結果是:無論呼叫getNewFather()或是呼叫getNewCaller()回傳的都是Father這個類別的實例。
列印的結果為:FatherFather
到這裡,看起來像new self()和new static()是沒有差別的。我們接著往下走:
class Sun1 extends Father { } class Sun2 extends Father { } $sun1 = new Sun1(); $sun2 = new Sun2(); print get_class($sun1->getNewFather()); print get_class($sun1->getNewCaller()); print get_class($sun2->getNewFather()); print get_class($sun2->getNewCaller());
看上面的程式碼,現在這個Father類別有兩個子類,由於Father類別的getNewFather()和getNewCaller()是public的,所以子類別繼承了這兩個方法。
列印的結果是:FatherSun1FatherSun2
我們發現,無論是Sun1還是Sun2,呼叫getNewFather()傳回的物件都是類別Father的實例,而getNewCaller()則傳回的是調用者的實例。
也就是$sun1回傳的是Sun1這個類別的實例,$sun2回傳的是Sun2這個類別的實例。
現在好像有點明白new self()和new static()的差別了。
首先,他們的區別只有在繼承中才能體現出來,如果沒有任何繼承,那麼這兩者是沒有區別的。
然後,new self()傳回的實例是萬年不變的,無論誰去調用,都會傳回同一個類別的實例,而new static()則是由呼叫者決定的。
上面的$sun1->getNewCaller()的呼叫者是$sun1對吧! $sun1是類別Sun1的實例,所以回傳的是Sun1這個類別的實例,$sun2同樣的道理就不贅述了。
相關推薦:
PHP中new self()和new static()有什麼不同
分析比較PHP物件導向中new self()與new static()的用法差異
以上是PHP中new self()與new static()的區別分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了PHP中的crypt()和password_hash()的差異,以進行密碼哈希,重點介紹其實施,安全性和對現代Web應用程序的適用性。

文章討論了通過輸入驗證,輸出編碼以及使用OWASP ESAPI和HTML淨化器之類的工具來防止PHP中的跨站點腳本(XSS)。

自動加載PHP會在需要時自動加載類文件,從而通過減少內存使用和增強代碼組織來提高性能。最佳實踐包括使用PSR-4和有效組織代碼。

本文討論了在PHP中管理文件上傳大小的管理,重點是2MB的默認限制以及如何通過修改PHP.INI設置來增加它。

本文討論了PHP 7.1中引入的PHP中的無效類型,允許變量或參數為指定類型或NULL。它突出顯示了諸如提高可讀性,類型安全性和明確意圖的好處,並解釋瞭如何聲明

本文討論了unset()和unlink()功能在編程中的差異,重點關注其目的和用例。 unset()從內存中刪除變量,而unlink()從文件系統中刪除文件。兩者都對效率至關重要


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。