PHP static:: - 后期绑定的注意事项

这里有一个重要的概念就是scope,如果子类没有overrided父类的属性或方法,那么那个属性或方法的scope就还是父类的。

样例代码如下:

<?php
class A {
    public static $v;
    public static function setV($value) {static::$v = $value;}
    public static function setV2($value) {self::$v = $value;}
}

class B extends A{
    public static $v;
};
class C extends A{};
class D extends B{};

A::setV('a');
C::setV('c');
B::setV('b');
var_dump(B::$v);
var_dump(A::$v);
var_dump(C::$v);
var_dump(D::$v);

// output:
// string(1) "b"
// string(1) "c"
// string(1) "c"
// string(1) "b"

在这里,即使是用C::setV(),改变的还是A的属性。因为C的$v就是A的$v

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

相关阅读更多精彩内容

友情链接更多精彩内容