在PHP中,您可以执行以下操作:
$foo = new Foo();
$foo->$newPropertyName = $value;
动态地向对象添加新属性。但是,当我尝试这样做时:
$this->$newPropertyName = $value;
它不起作用。如何从对象中动态添加新属性?
更新:
我的类继承自Yii CFormModel类。 CFormModel会覆盖PHP __set
方法,因此会导致问题。怎么做我想要的?如何使用默认的__set
方法?
答案 0 :(得分:1)
$this->newPropertyName = $value;
可以从内部中调用任何类的方法。在公共范围内就是这样:
$foo = new Foo();
$foo->newPropertyName = $value;
使用$this->
时,您不会放置美元符号。
然而,您可以尝试强制php评估您的变量(如可以变化的)属性名称,然后将其分配给您的属性,如下所示:
$foo->{$newPropertyName} = $value;
答案 1 :(得分:0)
它可以动态运行,代码中必定存在错误(可能会拼写错误$newPropertyName
)?
class Foo {
public function addProperty($newPropertyName, $value) {
$this->$newPropertyName = $value;
}
}
$foo = new Foo();
$foo->addProperty('weather', 'raining');
echo $foo->weather;