php面向對象中self和static的區別

在php的面向對象編程中,總會遇到php

class test{
  public static function test(){
    self::func();

    static::func();
  }

  public static function func(){}
}

可你知道self和static的區別麼?編程

其實區別很簡單,只須要寫幾個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();

獲得輸出spa

This is a car model
This is a car model

能夠發現,self在子類中仍是會調用父類的方法code

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

能夠看到,在調用static,子類哪怕調用的是父類的方法,可是父類方法中調用的方法還會是子類的方法(好繞嘴。。)get

在PHP5.3版本之前,static和self仍是有一點區別,具體是什麼,畢竟都是7版本的天下了。就不去了解了。io

總結呢就是:self只能引用當前類中的方法,而static關鍵字容許函數可以在運行時動態綁定類中的方法。面向對象編程

參考function

  1. http://www.programmerinterview.com/index.php/php-questions/php-self-vs-static/

相關文章
相關標籤/搜索