2009-07-30 104 views
4

如果我宣布一个基类如下:有没有办法让PHP的子类继承属性(静态和实例)?

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

我已经创建了下面的PHP错误报告: http://bugs.php.net/49105 我鼓励人们去检查出来,并给予支持。这是一个相当严格的限制。目前的行为也完全没有意义。 – 2009-07-30 00:43:21

+0

似乎人们已经将自己辞退到了不直观的默认行为上。这里的问题是PHP不正确的默认行为,或者需要一种动态声明属性的方法。 – 2009-07-30 13:13:43

+0

我完全支持你的追求,这种行为非常烦人!不幸的是,它似乎在这里停留。 – djfm 2012-06-30 15:10:13

回答

-2

答案是“有解决方法”。

您必须创建一个静态构造函数并让它调用以复制该属性。

1

继承和static属性有时会导致PHP中的“奇怪”的事情。

您应该看看PHP手册中的Late Static Bindings:它解释了在PHP中继承和使用static属性时可能发生的情况< = 5.2;并为PHP> = 5.3提供了解决方案,您可以使用static::关键字而不是self::,以便在执行(而不是编译)时执行静态绑定。

相关问题