理解 php new static


今天在看 Laravel 的容器(Container)實現時,發現了這么一段突然不能理解的代碼:

**
* Set the globally available instance of the container.
*
* @return static
*/
public static function getInstance()
{
    if (is_null(static::$instance)) {
        static::$instance = new static;
    }

    return static::$instance;
}

這個函數的功能很容易知道的,就是實例化一個全局唯一的容器,不理解之處在於:new static,這個表達式。之前我們自己寫單例的時候都是用 new self,也並沒有什么不對。

google了一下,發現這不就是之前所說的延遲靜態綁定嗎?這個概念我是懂的,可是在看實際應用時卻一時沒反應過來。

這說明了一件事:自以為懂的東西,可能其實並不懂。只有在實際環境中多看、多實踐、多總結,才能避免這種半懂不懂的狀態,才能深刻理解一件事情。

另外,new selfnew static 的區別:兩者都是實例化自身,區別在於繼承。如果沒有繼承,則兩者返回的實例都是屬於一個類;如果有繼承,子類調用該方法,new self 仍然返回原類的實例,而 new static 返回實際子類的實例。這就是延遲靜態綁定,static 的值,使用的是最后實際調用那個方法的類。

PS - 個人博客原文:理解 php new static


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM