有没有一种方法来让PHP类继承属性(包括静态和实例)?(Is there a way to have

2019-06-27 04:39发布

如果我宣布一个基类,如下所示:

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的后期静态绑定,也继承,将允许这一点。 我已经黑客我身边这样...但它似乎只是没有什么意义,一个未申报的静态属性会回到属于它的父的价值!?

Answer 1:

继承和static特性也有时导致PHP“奇怪”的事情。

你应该看看延迟静态绑定在PHP手册:它解释了继承和使用时会发生什么static的PHP性能<= 5.2; 并给出了解决方案,为PHP> = 5.3,你可以使用static::而不是关键字self:: ,使静态绑定是在执行完成的(而不是编译)时间。



Answer 2:

答案是“有一个解决办法。”

你必须创建一个静态构造函数,并把它称为复制的属性。



文章来源: Is there a way to have PHP subclasses inherit properties (both static and instance)?