有没有办法让PHP子类继承属性(静态和实例)?
如果我声明一个基类,如下所示:有没有办法让PHP子类继承属性(静态和实例)?,php,inheritance,late-static-binding,Php,Inheritance,Late Static Binding,如果我声明一个基类,如下所示: abstract class Parent { protected static $message = "UNTOUCHED"; public static function yeah() { static::$message = "YEAH"; } public static function nope() { static::$message = "NOPE"; }
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的后期静态绑定和继承是否允许这种情况。我已经在尝试解决这个问题了……但是,一个未声明的静态属性会依赖它的父属性来获取一个值,这似乎没有什么意义 继承和
静态
属性有时会导致PHP中出现“奇怪”的事情
您应该看看PHP手册:它解释了在PHP=5.3中继承和使用static
属性时会发生什么,您可以使用static::
关键字而不是self::
,这样静态绑定在执行(而不是编译)时完成。答案是“有一个变通方法”
您必须创建一个静态构造函数,并调用它来复制属性。对于那些最终想知道“WTF PHP”的人来说,这种行为似乎有几个原因,以及为什么保留它,尽管有些奇怪:
- 为什么后期静态绑定不会改变这一点:可能与#1有关
- 为什么我们看到的缺陷没有在文档页面中解释。。。。。。。。。。。。。。。。这就是PHP,对吗