我有一个名为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
方法的问题,但我很好奇如何直接设置该属性。
答案 0 :(得分:3)
我想你想要
$_SESSION['Preferences']->{substr($key, 5)} = $value;
需要大括号{}
来指导PHP解析器指向正确的方向;-)鉴于$key
为12345test
,这将调用__set('test', $value)
。