如何在类中声明公共变量变量

时间:2011-03-23 13:06:11

标签: php oop class variables declaration

嘿,我有这样的课程

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。

4 个答案:

答案 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也无法帮助完成这项任务。它们主要用于改变方法。
  • classkit相同。

我不知道其他这样的PECL扩展,但无论如何这都不是有用的通用解决方案。因此,对于当前的PHP版本,您无法在解析阶段之后添加静态类属性。

答案 2 :(得分:0)

看一下魔术方法__set和__get

答案 3 :(得分:0)

马里奥说:

  

这不可行。静态属性可以   仅在解析阶段定义。   无论是ReflectionProperty还是   ReflectionClass :: setStaticPropertyValue,   目前还没有runkit_ *函数   能够(打算)创造静态   类属性。遗憾

Geuss我愿意接受一项工作。 制作一个数组$ ini并将值加载到derp中:$ ini ['base'] ['key']

感谢您的帮助,

罗宾