如何强制派生类包含静态属性?

时间:2017-08-16 10:02:52

标签: php

如何强制执行派生类应包含某些静态属性或值的规则?

在这个例子中,我希望确保每个扩展Parent的类都应该包含一个静态变量$ foo

abstract class Parent{
    // Trying to enforce that all derived classes must contain a static $foo;
    static protected $foo;

    public function getFoo(){
        return get_class($this)::$foo;
    }

}

class Child extends Parent{
     static protected $foo = 0;
}

1 个答案:

答案 0 :(得分:4)

你不能abstract一个类属性但是在这种情况下,最好做以下事情:

abstract class Parent{      
    abstract public function getFoo();
}

class Child extends Parent{
    private $foo = 0;

    public function getFoo(){
        return $this->foo;
    }
}

作为一个额外的注意事项,您将来知道get_class($this)::$foo这是不必要的,您可以static::$foo执行相同的工作。