继承静态值

时间:2017-11-06 23:06:21

标签: php

我强烈怀疑我的整体代码设计错误,但是可以继承静态值吗?

我有一个基类BaseModel,我在其中进行__callStatic调用。 BaseModel扩展到不同的模型类型,在每个模型类型中,我有一个public static $type;,其中包含一个字符串值,注明了该类型。当我在self::$type的{​​{1}}电话中拨打callStatic时,我会收到空​​,这在事后是有道理的。但是,我不确定如何在不将BaseModel代码复制到每个类中的情况下获取调用类的类型(不确定我是否可以将魔术方法放入特征中?)。

现在,我没有做任何花哨的事情:

callStatic
public static function __callStatic($method, $params) { var_dump(self::$type); } 中的

。但如果可能的话,我无法弄清楚如何处理这个问题。

1 个答案:

答案 0 :(得分:1)

您正在寻找可以与static关键字一起使用的Late Static Bindings

self(以及__CLASS__)总是在编译时进行评估,因此它总是在不知道继承和调用上下文的情况下执行。

然而,

static尝试通过在运行时评估调用上下文来解决此限制。

class a {

    public static $foo = "A";

    public static function __callStatic($method, $params) {
        echo static::$foo . "\n";
    }
}

class b extends a {
    public static $foo = "B";
}

a::test();
b::test();