我正在尝试为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'
这甚至可能吗?或者有人有更好的建议吗?
答案 0 :(得分:2)
此:
$$a->b
......意思是:
$a
b
由于$a
(在您的情况下为$this
)是一个对象,感觉就像一个错误。你可能想要:
${$this->name}