如果我按如下方式声明基类:
abstract class Parent {
protected static $message = "UNTOUCHED";
public static function yeah() {
static::$message = "YEAH";
}
public static function nope() {
static::$message = "NOPE";
}
public static function lateStaticDebug() {
return(static::$message);
}
}
然后扩展它:
class Child extends Parent {
}
然后执行此操作:
Parent::yeah();
Parent::lateStaticDebug(); // "YEAH"
Child::nope();
Child::lateStaticDebug(); // "NOPE"
Parent::yeah();
Child::lateStaticDebug() // "YEAH"
有没有办法让我的第二个类从第一个继承属性而不仅仅是方法?
我只是想知道是否有关于PHP的后期静态绑定以及允许这种情况的继承。我已经习惯了这个问题...但是,一个未声明的静态属性会回落到它的父级值上似乎没有意义吗?
答案 0 :(得分:1)
继承和static
属性有时会导致PHP中的“奇怪”事情。
您应该查看PHP手册中的Late Static Bindings:它解释了在PHP中继承和使用static
属性时可能发生的情况< = 5.2;并为PHP> = 5.3提供了解决方案,您可以使用static::
关键字而不是self::
,以便在执行(而不是编译)时完成静态绑定。
答案 1 :(得分:-1)
对于那些最终想知道“WTF PHP”的人来说,这种行为似乎有几个原因以及为什么保留它,尽管很奇怪:
还有两个问题:
答案 2 :(得分:-2)
答案是“解决方法”。
您必须创建一个静态构造函数并调用它来复制属性。