我强烈怀疑我的整体代码设计错误,但是可以继承静态值吗?
我有一个基类BaseModel
,我在其中进行__callStatic
调用。 BaseModel
扩展到不同的模型类型,在每个模型类型中,我有一个public static $type;
,其中包含一个字符串值,注明了该类型。当我在self::$type
的{{1}}电话中拨打callStatic
时,我会收到空,这在事后是有道理的。但是,我不确定如何在不将BaseModel
代码复制到每个类中的情况下获取调用类的类型(不确定我是否可以将魔术方法放入特征中?)。
现在,我没有做任何花哨的事情:
callStatic
public static function __callStatic($method, $params) {
var_dump(self::$type);
}
中的。但如果可能的话,我无法弄清楚如何处理这个问题。
答案 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();