首先,我參考的是這位博主的文章:https://blog.csdn.net/qq_25600055/article/details/78549435laravel
前言,我以前是知道點延遲動態綁定的,真的是不看laravel源碼,發現本身真的很落後。還停留在5 的時代。this
閒話很少說。上代碼。spa
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A { //此處,是與我發的博文中的demo不一樣之處 public static function get_self() { return new self(); } }
在這個時刻,若是執行echo get_class(B::get_self()); 你會發現出來的會是B。
緣由很簡單,就像原博中所總結的同樣:.net
self - 就是這個類,是代碼段裏面的這個類。code
static - PHP 5.3加進來的只得是當前這個類,有點像$this的意思,從堆內存中提取出來,訪問的是當前實例化的那個類,那麼 static 表明的就是那個類。blog
由於,B複寫了A中的方法,因此,B::get_self()執行出來的是B。
沒有複寫A中的方法,執行getSelf(),因爲繼承的緣由,會去執行父類中的方法,因此執行出來的結果是A。
而static不一樣,不管你B有沒有複寫任何A中的方法,誰執行就是誰。繼承