关于self和static的静态调用

本文主题是后期静态绑定,探讨在继承范围内,通过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是在实例化的时候才进行绑定指向的是此时实例化的类,也就是子类。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容