У меня есть класс с именем PreferenceCollection
, который я загружаю для пользователя в $_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
, но мне любопытно, как я могу установить это свойство напрямую.