在我们以往中,在类中使用self关键字的时候都是指向了被调用方法定义时的类,而非原始的调用类。

例如:

class Animal{
  static $IQ_lv_avg = 1;
  public static function myiqlvavg(){
    echo self::$IQ_lv_avg.PHP_EOL;
  }
  public static function test(){
    self::myiqlvavg();
  } } class Dog extends Animal{
  static $IQ_lv_avg = 3;
  public static function myiqlvavg(){
    echo self::$IQ_lv_avg.PHP_EOL;
  } } Dog::test();//echo 1

我们可以得到最后得到的平均IQ等级是1

self指向的是定义其所在方法的类。

我们如果想执行Dog类,也就是调用类的静态方法怎么办呢?

静态后期绑定可以做到。

使用方法其实就是使用static关键字。

例如:

class GrandparentClass{

  static $age = 40;
  public static function foo(){
    static::whatMyAge();
}   public static function whatMyAge(){
    echo __CLASS__.PHP_EOL;
  }
} class ParentClass extends GrandparentClass{ static $age = 60;
  public static function start(){
    GrandparentClass::foo();
    parent::foo();
    self::foo();
  }
} class ChildrenClass extends ParentClass{ static $age = 90;
  public static function whatMyAge(){
    echo __CLASS__.PHP_EOL;
  }
}
ChildrenClass::start();

最终获得的年代为:

40 90 90

在静态方法中,我们可以使用get_called_class()函数得知调用静态方法的类名。

例如:

class foo {
static public function test() {
var_dump(get_called_class());
}
} class bar extends foo {
} foo::test();//echo foo
bar::test();//echo bar

在php 5.5之后可以使用static::class 达到get_called_class()同效果。

Note:可以直接调用phpversion函数查看当前php版本,或者cli模式查看,总之方法多多。

php中的后期静态绑定("Late Static Binding")的更多相关文章

  1. get_called_class--后期静态绑定("Late Static Binding")类的名称

    get_called_class--后期静态绑定("Late Static Binding")类的名称 string get_called_class ( void ) 获取静态方 ...

  2. php中的后期静态绑定

    后期静态绑定PHP手册 使用的保留关键字: static 定义: static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的.也可以称之为"静态绑定",因为它可以用 ...

  3. 139-PHP static后期静态绑定(二)

    <?php class test{ //创建test类 public function __construct(){ static::getinfo(); //后期静态绑定 } public s ...

  4. 138-PHP static后期静态绑定(一)

    <?php class test{ //创建test类 public function __construct(){ self::getinfo(); //后期静态绑定 } public sta ...

  5. static后期静态绑定

    先说一下__CLASS__,get_class() ,  get_called_class() 区别: __CLASS__获取当前的类名, get_class()与上面一样,都是获取当前的类名, ge ...

  6. php Late Static Bindings延迟静态绑定

    官网说道: As of PHP 5.3.0, PHP implements a feature called late static bindings which can be used to ref ...

  7. PHP之后期静态绑定

    PHP后期静态绑定的(late static bindings) 理解PHP延迟静态绑定 static::中的static其实是运行时所在类的别名,并不是定义类时所在的那个类名.这个东西可以实现在父类 ...

  8. PHP 中的新语法 new static 是个啥意思?

    简单通俗的来说, self就是写在哪个类里面, 实际调用的就是这个类.所谓的后期静态绑定, static代表使用的这个类, 就是你在父类里写的static, 然后通过子类直接/间接用到了这个stati ...

  9. php后期静态绑定

    php后期静态绑定 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 虽然也可以调用非静态方法,但是不会在运行时绑定. static 不再只是简 ...

随机推荐

  1. HDU5308-脑补-对拍

    先贴上对拍的结果: 感想:可以明显发现下标相差1的关系,所以对付这种需要大量脑补的水题,真的蛋疼,以前没用过对拍,只知道有这么回事,调程序什么的都是手算,人工模拟(经常大脑发热,严重缺氧不足),所以试 ...

  2. Android比较实用的属性

    ImageView //设置图片填充整个背景 android:scaleType="fitXY"

  3. php 写model层

    <?php /** * @author Administrator * */ class User { private $id; private $admin; private $paw; pr ...

  4. mssql sql高效关联子查询的update 批量更新

    /* 使用带关联子查询的Update更新     --1.创建测试表 create TABLE Table1     (     a varchar(10),     b varchar(10),   ...

  5. MSChart使用之双Y轴使用

    protected void SearchChart() { Chart1.ChartAreas.Clear(); Chart1.Series.Clear(); ChartArea _ChartAre ...

  6. jrae源码解析(一)

    jare用java实现了论文<Semi-Supervised Recursive Autoencoders for Predicting Sentiment Distributions>中 ...

  7. 03C#基础(2)

    1.比较运算符 ==等于;  !=不等于;  >大于;  >=大于或者等于;  <小于;  <=小于或者等于; 比较运算符(又称关系运算符)用来进行值得真假性判断,结果是boo ...

  8. HDU 4632 CF 245H 区间DP(回文)

    先说HDU 4632这道题,因为比较简单,题意就是给你一个字符串,然后给你一个区间,叫你输出区间内所有的回文子序列,注意是回文子序列,不是回文字串. 用dp[i][j]表示区间[i,j]内的回文子序列 ...

  9. C++在使用Qt中SLOT宏需要注意的一个小细节

    大家都知道C++虚函数的机制,对于基类定义为虚函数的地方,子类如果覆写,在基类指针或者引用来指向子类的时候会实现动态绑定. 但如果指针去调用非虚函数,这个时候会调用C++的静态绑定,去判断当前的指针是 ...

  10. js 得到当前季度

    Date.prototype.getQuarter = function() { var month = this.getMonth(); if(month < 3) { return '第一季 ...