嘿,我有这样的课程
class derp{
public $$ini;
public static function regIni($ini){
derp::$$ini = 'test';
}
}
然后在另一个文件中
core::regIni('register');
然后我在其他地方使用
core::$register;
这会产生错误
public $$ini
不是有效的代码,但如果我离开它,我就无法设置
core::$$ini
我该如何解决这个问题?
请注意,$$ ini是一个变量变量,意味着$ ini的值实际上是变量名,所以$ ini ='registry'然后$$ ini实际意味着$ registry。
答案 0 :(得分:3)
为什么不使用访问方法来设置和获取类数据?
class derp {
protected static $_data = array();
public static function regIni($ini, $value) {
derp::$_data[$ini] = $value;
}
public static function getIni($ini, $default = NULL) {
return isset(derp::$_data[$ini]) ? derp::$_data[$ini] : $default;
}
}
答案 1 :(得分:1)
所以,这不是一个过于有用的答案,因为我可以得出结论,目前这是不可能的。
new ReflectionProperty("derp", "static_prop")
作为示例并附加它。这只是为了内省。$c = new ReflectionClass("derp");
和$derp->setStaticPropertyValue("p", 123);
也无效。属性需要预先定义。runkit_*
functions也无法帮助完成这项任务。它们主要用于改变方法。我不知道其他这样的PECL扩展,但无论如何这都不是有用的通用解决方案。因此,对于当前的PHP版本,您无法在解析阶段之后添加静态类属性。
答案 2 :(得分:0)
看一下魔术方法__set和__get
答案 3 :(得分:0)
这不可行。静态属性可以 仅在解析阶段定义。 无论是ReflectionProperty还是 ReflectionClass :: setStaticPropertyValue, 目前还没有runkit_ *函数 能够(打算)创造静态 类属性。遗憾
Geuss我愿意接受一项工作。 制作一个数组$ ini并将值加载到derp中:$ ini ['base'] ['key']
感谢您的帮助,
罗宾