我有许多继承单个基类的PHP类。这个基类提供了一个静态方法,让我们称之为methodA()
,可以在每个类中重写,但实际上不会被覆盖太多。每个类都有一个静态变量,我们称之为name
不同,但methodA()
需要能够根据name
对每个类采取不同的行为。我是面向对象PHP的新手,所以我不确定如何做到最好。
在Java中,我会在基类上创建一个属性,然后在构造函数方法中定义它,然后我将通过super()
调用它,但我不确定如何最好地基于静态数据执行此操作。我是在正确的轨道上吗?什么是实现这一目标的最佳方式?
答案 0 :(得分:0)
这个答案归功于 @AlexBlex。
PHP提供了一个名为Late Static Bindings的功能,它允许这种行为。
从PHP 5.3.0开始,PHP实现了一个名为late static bindings的功能,可用于在静态继承的上下文中引用被调用的类。
在问题中提供的示例中,执行此操作的方式如下:
class Base {
public static function methodA() {
return static::$name;
}
}
class A extends Base {
public static $name = "Apple";
}
class B extends Base {
public static $name = "Box";
}
然后您可以使用预期结果调用该函数:
echo(A::methodA()); // "Apple"
echo(B::methodA()); // "Box"
此示例在PHP 7中运行。