PHP - 通过prop名称更改对象道具

时间:2014-08-13 15:19:36

标签: php oop stdclass

我有一些改变某些对象和值的属性,以这种格式应用:

$toApply = array(
    "post.author.status.time" => 0,
    "page.title" => "My title",
    "page.tags" => "My, Tags"
)

我有对象$post$page是stdClass对象,因此我可以轻松编写像$page->title = "My title"

这样的代码

我也知道我可以通过

来做到这一点
$prop = "title";
$page->{$prop} = "My title"

但它仅适用于1级对象。

问题是如何深入到对象内部(如果需要,如果对象例如没有任何属性,我也会创建所需的子属性,我已经"page.someprop.deeperprop.deepprop.title"

我的1级功能如下:

function applyProp($prop, $value, $obj) {
    $forSureObj = (object) $obj;

    $forSureObj->{$prop} = $value;
    return $forSureObj;
}

1 个答案:

答案 0 :(得分:1)

这是执行此操作的一些代码。很好的小运动。不知道如何调用它,但在这里你有一个示例函数来做它。

class TestClass
{
public $prop2 = "test";
}
class TestClass2
{
    public $prop;
    public function __construct()
    {
        $this->prop = new TestClass();
    }
}
function deepProperty($obj,$property,$value = null)
{
    $curObj = &$obj;
    $properties = explode('.',$property);
    while(count($properties) > 1)
        $curObj = &$curObj->{array_shift($properties)};
    if ($value != null)
        $curObj->{$properties[0]} = $value;
    return $curObj->{$properties[0]};
}

$object = new TestClass2();

deepProperty($object,"prop.prop2","not test");
echo deepProperty($object,"prop.prop2");