• php中的后期静态绑定("Late Static Binding")


    在我们以往中,在类中使用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模式查看,总之方法多多。

    Praise the sun.
  • 相关阅读:
    188. 买卖股票的最佳时机 IV
    139. 单词拆分
    198. 打家劫舍
    122. 买卖股票的最佳时机II
    C#界面控件汇总
    电脑重装系统的三种方式
    SQL Server Profiler的使用
    反向路由检测 问题记录
    迅为龙芯2K1000开发板网络加载系统
    迅为IMX8M mini开发板Linix系统修改默认屏幕
  • 原文地址:https://www.cnblogs.com/xzysaber/p/4675353.html
Copyright © 2020-2023  润新知