我知道这个问题已经被问过好几次了,但他们都没有提供解决方法的真正答案。也许有一个适合我的具体情况。
我正在构建一个使用魔术方法的映射器类__get()
延迟加载其他对象。它看起来像这样:
public function __get ( $index )
{
if ( isset ($this->vars[$index]) )
{
return $this->vars[$index];
}
// $index = 'role';
$obj = $this->createNewObject ( $index );
return $obj;
}
在我的代码中我这样做:
$user = createObject('user');
$user->role->rolename;
到目前为止这有效。这User
对象没有名为“角色”的属性,因此它使用了魔法__get()
方法来创建该对象,并从“角色”对象返回其属性。
但是当我尝试修改“角色名”时:
$user = createUser();
$user->role->rolename = 'Test';
然后它给了我以下错误:
注意:间接修改重载属性没有效果
不确定这是否仍然是 PHP 中的一些错误,或者它是否是“预期行为”,但无论如何它都不会按照我想要的方式工作。这对我来说确实是一个表演障碍......因为我到底如何能够更改延迟加载对象的属性?
EDIT:
实际问题似乎仅在我返回包含多个对象的数组时才会发生。
我添加了一段示例代码来重现该问题:
http://codepad.org/T1iPZm9t
您确实应该在 PHP 环境中运行它,才能真正看到“错误”。但这里发生了一些非常有趣的事情。
我尝试更改对象的属性,这给了我通知“无法更改重载属性”。但如果我在那之后回显该属性,我会发现它实际上确实改变了值......真的很奇怪......