在PHP中使用字符串属性名称设置对象的属性

时间:2012-01-10 20:27:35

标签: php oop reflection

我希望能够设置对象的属性,但会生成属性名称。如何在PHP中完成此操作,而不使用eval()

e.g:

$obj->name = "Prakash Raman"; // Works
$obj->$attr_name = <some value>; // Would want something like this to work

我希望能够更改$attr_name

感谢。

3 个答案:

答案 0 :(得分:8)

$obj->{$attr_name} = "New value";

这将完全实现。

但请注意,我建议将其与property_exists()结合使用以验证财产的存在。

答案 1 :(得分:1)

有趣的是,您发布的代码将起作用。 (但是,对于property_exists,++。)

http://codepad.org/qW0Tj4MR

答案 2 :(得分:1)

我理解这个问题有一个有效的答案,但只是添加到你可以做的许多方法:

<?php
$myClass = new ReflectionClass($someClass);
if($myClass->hasProperty($someProperty)){
   $myClass->getProperty($someProperty)->setValue($someClass,__NEW__VALUE__);
}
?>