php面向?qū)ο缶幊蘳elf和static的區(qū)別

字號(hào):


    這篇文章主要介紹了PHP中static關(guān)鍵字以及與self關(guān)鍵字的區(qū)別,本文講解了static關(guān)鍵字的定義、遲綁定(Late Static Bindings)、以及與self關(guān)鍵字的區(qū)別等內(nèi)容,需要的朋友可以參考下
    在php的面向?qū)ο缶幊讨?,總?huì)遇到
    class test{
     public static function test(){
      self::func();
      static::func();
     }
     public static function func(){}
    }
    可你知道self和static的區(qū)別么?
    其實(shí)區(qū)別很簡(jiǎn)單,只需要寫(xiě)幾個(gè)demo就能懂:
    Demo for self:
    class Car
    {
     public static function model(){
      self::getModel();
     }
     protected static function getModel(){
      echo "This is a car model";
     }
    }
    Car::model():
    Class Taxi extends Car
    {
     protected static function getModel(){
      echo "This is a Taxi model";
     }
    }
    Taxi::model():
    得到輸出
    This is a car model
    This is a car model
    可以發(fā)現(xiàn),self在子類(lèi)中還是會(huì)調(diào)用父類(lèi)的方法
    Demo for static
    class Car
    {
     public static function model(){
      static::getModel();
     }
     protected static function getModel(){
      echo "This is a car model";
     }
    }
    Car::model();
    Class Taxi extends Car
    {
     protected static function getModel(){
      echo "This is a Taxi model";
     }
    }
    Taxi::model();
    得到輸出
    This is a car model
    This is a Taxi model
    可以看到,在調(diào)用static,子類(lèi)哪怕調(diào)用的是父類(lèi)的方法,但是父類(lèi)方法中調(diào)用的方法還會(huì)是子類(lèi)的方法(好繞嘴。。)
    在PHP5.3版本以前,static和self還是有一點(diǎn)區(qū)別,具體是什么,畢竟都是7版本的天下了。就不去了解了。
    總結(jié)呢就是:self只能引用當(dāng)前類(lèi)中的方法,而static關(guān)鍵字允許函數(shù)能夠在運(yùn)行時(shí)動(dòng)態(tài)綁定類(lèi)中的方法。