我知道这个问题已被问过好几次了,但是他们都没有一个真正的答案来解决这个问题.也许有一个针对我的具体案例.
我正在构建一个mapper类,它使用magic方法__get()来延迟加载其他对象.它看起来像这样:
public function __get ( $index )
{
if ( isset ($this->vars[$index]) )
{
return $this->vars[$index];
}
// $index = 'role';
$obj = $this->createNewObject ( $index );
return $obj;
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中我做:
$user = createObject('user');
$user->role->rolename;
Run Code Online (Sandbox Code Playgroud)
这项工作到目前为止.该User对象没有名为"role"的属性,因此它使用magic __get()方法创建该对象,并从"role"对象返回其属性.
但是当我尝试修改'rolename'时:
$user = createUser();
$user->role->rolename = 'Test';
Run Code Online (Sandbox Code Playgroud)
然后它给我以下错误:
注意:间接修改重载属性无效
不确定这是否仍然是PHP中的一些错误,或者它是否是"预期的行为",但无论如何它都不能按我想要的方式工作.这对我来说真的是一个阻止......因为我怎么能改变延迟加载对象的属性?
编辑:
当我返回包含多个对象的数组时,似乎只会发生实际问题.
我添加了一个代码片段来重现问题:
你真的应该在你的PHP环境中运行它,真正看到'错误'.但这里有一些非常有趣的东西.
我试图改变一个对象的属性,这给了我通知'不能改变重载属性'.但是,如果我在之后回复该属性,我发现它实际上是DID改变了价值......真的很奇怪......