美文网首页
关于self和static的静态调用

关于self和static的静态调用

作者: 叶敏 | 来源:发表于2018-02-26 09:59 被阅读0次

    本文主题是后期静态绑定,探讨在继承范围内,通过self和static调用静态方法时,实际指向的类是父类还是子类。

    使用魔术变量Class, 输出实际指向的类名。实例化Son类后,在使用selfGet时调用的是父类的hello方法, 在使用staticGet调用的是子类的hello方法。

    class Father{
    
        public static function hello()
        {
            echo __Class__;
        }
    
        public static function selfGet()
        {
            echo self::hello();
        }
    
        public static function staticGet()
        {
            echo static::hello();
        } 
    }
    
    class Son extends Father{
    
        public static function hello()
        {
            echo __Class__;
        }
    
    }   
    
    (new Son)::selfGet();//输出结果father
    echo "<br>";
    (new Son)::staticGet();//输出结果son
    

    这是因为使用self调用静态方法时,是在子类未实例化调用之前就已经绑定完毕,所以他原先在父类中指向的就是父类中的方法。而static是在实例化的时候才进行绑定指向的是此时实例化的类,也就是子类。

    相关文章

      网友评论

          本文标题:关于self和static的静态调用

          本文链接:https://www.haomeiwen.com/subject/bifexftx.html