• 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.
  • 相关阅读:
    CSRF 攻击原理及防护
    XSS 攻击原理及防护
    git 基础命令大全
    vue3.0 VS vue2.0
    Android eMMC Booting[wiki百科]
    Android Fastboot[wiki百科]
    Android View.onMeasure方法的理解[转]
    某android游戏逆向小记
    Android网络编程—同时上传参数和文件到服务器 [转载]
    apk自我保护的一种实现方式——运行时自篡改dalvik指令【转载】
  • 原文地址:https://www.cnblogs.com/xzysaber/p/4675353.html
Copyright © 2020-2023  润新知