static后期静态绑定

  1. 先说一下__CLASS__,get_class() ,  get_called_class() 区别:

    __CLASS__获取当前的类名,

    get_class()与上面一样,都是获取当前的类名,

    get_called_class()获取当前主调类的类名。
    参考程序:

    class A 
    {
        public function say()
        {
            echo 'a is called by'.__CLASS__.'<br/>';
            echo 'a is called by'.get_class().'<br/>';
            echo 'a is called by'.get_called_class().'<br/>';
        }
    }
    
    class B extends A
    {
        public function say()
        {
            parent::say(); //parent::调用父类中定义的成员方法
            echo 'b is called by'.__CLASS__.'<br/>';
            echo 'b is called by'.get_class().'<br/>';
            echo 'b is called by'.get_called_class().'<br/>';
        }
    }
    
    $b = new B;
    $b->say();
    View Code

    程序的运行结果是:

    a is called byA
    a is called byA
    a is called byB
    b is called byB
    b is called byB
    b is called byB

  1. 然后是static后期静态绑定介绍:
    <?php
    class A {
        public static function who() {
            echo __CLASS__;
        }
        public static function test() {
            self::who();
        }
    }
    
    class B extends A {
        public static function who() {
            echo __CLASS__;
        }
    }
    
    B::test();
    ?>
    
    //输出 A
    
    class A {
        public static function who() {
            echo __CLASS__;
        }
        public static function test() {
            static::who(); // 后期静态绑定从这里开始
        }
    }
    
    class B extends A {
        public static function who() {
            echo __CLASS__;
        }
    }
    
    B::test();
    
    //   现在输出  B 
    View Code
  2. 详细内容参考手册

猜你喜欢

转载自www.cnblogs.com/bneglect/p/10959834.html