php使用object属性值作为变量名称

时间:2014-05-08 16:24:16

标签: php

我正在尝试为php中的原始类型创建一个包装类,但是我在创建'string'类时遇到了问题;

如果创建一个像$str = new _string();这样的新类,如果我仍然可以使用$str = 'foo';分配值,那将会很好,但当然会覆盖$str并且类将被销毁。

因此,在实例化$str <时,我通过在全局范围内创建$$str来获取$$str及其值为$str的类(可能是疯狂的) / p>

问题是global $$this->name无法正常工作,事实上我不太清楚会发生什么。

class _string {

    private $name;

    public function __construct($name) {
        $this->name = 'str_' . $name;     
        global $$this->name;         // <---this doesn't work properly   
        $strName = 'str_' . $name;        //assigning a global variable variable
        global $$strName;                 //from a local variable works fine   
    }

    public function __toString() {
        return $this->name;
    }

    public function rev() {
        $strName = $this->name;
        global $$strName;
        $$strName=strrev($$strName);
        $$this->name=strrev($$this->name);
    }                         //       ^
                              //       |
}                             //       |
                              //       |
$str = new _string('str');    //       |
$$str = 'hello';              //       |
$str->rev();    //Warning: Attempt to assign property of non-object 
echo $$str;     //olleh  

我的目标是避免使用$str->value='foo'并尽可能接近$str='foo'

这甚至可能吗?或者有人有更好的建议吗?

1 个答案:

答案 0 :(得分:2)

此:

$$a->b

......意思是:

  1. 采用变量$a
  2. 投射到字符串
  3. 使用字符串调用具有该名称的变量
  4. 阅读资产b
  5. 由于$a(在您的情况下为$this)是一个对象,感觉就像一个错误。你可能想要:

    ${$this->name}