设置类的动态属性值时PHP不明确的语句

时间:2011-08-01 19:13:28

标签: php oop properties

我有一个名为PreferenceCollection的类,我将用户登录到我的Web应用程序后加载到$_SESSION['Preferences']。这个简单的类使用魔术方法来获取和设置值。以下是相关部分:

class PreferenceCollection {
    private $prefs;

    function __construct() {
        $this->prefs=Array();
    }

    function __get($var) {
        return $this->prefs[$var];
    }

    function __set($var, $value) {
        $this->prefs[$var]=$value;
        $this->save();
    }
}

稍后在我的代码中,我发现有必要设置动态选择的属性的值。对于此示例,$key='pref_some_preference'value='something'

$_SESSION['Preferences']->substr($key, 5)=$value;

我期望相当于$_SESSION['Preferences']->some_preference=$value。也就是说,将使用__set的第一个参数和第二个参数some_preference调用$value魔术方法。

相反,这一行给了我一个致命的错误:

  

PHP致命错误:无法在写上下文中使用方法返回值

我假设PHP正在解释我想要将substr()调用的返回值设置为某个东西,而不是设置属性。

我对正在发生的事情的解释是否正确?我该如何解决这个问题?

目前我正在解决公共set方法的问题,但我很好奇如何直接设置该属性。

1 个答案:

答案 0 :(得分:3)

我想你想要

$_SESSION['Preferences']->{substr($key, 5)} = $value;

需要大括号{}来指导PHP解析器指向正确的方向;-)鉴于$key12345test,这将调用__set('test', $value)