后期静态绑定|不修改父类的' static '关键字


late static binding | without modifying parent class with `static` keyword

我有以下父类和子类。

class Parent_class {
    protected static function method_one() {
        echo "I am in Parent_class in method_one";
    }
    protected function execute() {
        static::method_one();
    }
    public function start() {
        $this->execute();
    }
}
class Child_class extends Parent_class {
    protected static function method_one() {
        echo "I am in Child_class in method_one";
    }
}
$obj = new Child_class();
$obj->start();

Result - it is calling Child class method.

结果与预期的一样,因为php5.3支持静态延迟绑定,并且已经保留了关键字static

但问题是,我没有对Parent类的写访问权限,因此我不能在调用methode_one时使用static,因此它不执行后期静态绑定。

是否有任何方法可以使用重写方法?

父类是一个定义的库,我不能修改它。

解决办法是修改父类或者完全放弃这个想法,但是你能建议其他的选择吗?

为什么不在子类中实现execute或start ?