理解 php new static

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

**
* 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了一下,發現這不就是以前所說的延遲靜態綁定嗎?這個概念我是懂的,但是在看實際應用時卻一時沒反應過來。google

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

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

PS - 我的博客原文:理解 php new staticget

相關文章
相關標籤/搜索