从PHP

时间:2017-05-17 14:08:38

标签: php class static

我有许多继承单个基类的PHP类。这个基类提供了一个静态方法,让我们称之为methodA(),可以在每个类中重写,但实际上不会被覆盖太多。每个类都有一个静态变量,我们称之为name不同,但methodA()需要能够根据name对每个类采取不同的行为。我是面向对象PHP的新手,所以我不确定如何做到最好。

在Java中,我会在基类上创建一个属性,然后在构造函数方法中定义它,然后我将通过super()调用它,但我不确定如何最好地基于静态数据执行此操作。我是在正确的轨道上吗?什么是实现这一目标的最佳方式?

1 个答案:

答案 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中运行。