相关疑难解决方法(0)

PHP - 间接修改重载属性

我知道这个问题已被问过好几次了,但是他们都没有一个真正的答案来解决这个问题.也许有一个针对我的具体案例.

我正在构建一个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中的一些错误,或者它是否是"预期的行为",但无论如何它都不能按我想要的方式工作.这对我来说真的是一个阻止......因为我怎么能改变延迟加载对象的属性?


编辑:

当我返回包含多个对象的数组时,似乎只会发生实际问题.

我添加了一个代码片段来重现问题:

http://codepad.org/T1iPZm9t

你真的应该在你的PHP环境中运行它,真正看到'错误'.但这里有一些非常有趣的东西.

我试图改变一个对象的属性,这给了我通知'不能改变重载属性'.但是,如果我在之后回复该属性,我发现它实际上是DID改变了价值......真的很奇怪......

php magic-methods

53
推荐指数
3
解决办法
10万
查看次数

标签 统计

magic-methods ×1

php ×1