關於new static 與 new self的區別(後續有新發現,會繼續更新)

首先,我參考的是這位博主的文章: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中的方法,誰執行就是誰。繼承

相關文章
相關標籤/搜索