Мне интересно, возможно ли это:
Я успешно использовал магический метод __set () для установки значений свойств класса:
class View
{
private $data;
public function __set( $key, $value )
{
$this->data[$key] = $value;
}
}
Так что я могуto:
$view = new View();
$view->whatever = 1234;
Проблема возникает, когда я хочу, например, объединить строку.Кажется, что __set () не вызывается (на самом деле он не вызывается).
$view = new View();
$view->a_string = 'hello everybody'; //Value is set correctly
$view->a_string.= '<br>Bye bye!'; //Nothing happens...
echo $view->a_string;
Это выводит "всем привет".Я не могу выполнить __set () во втором назначении.Читая php.net, он говорит, что:
__set() is run when writing data to inaccessible properties.
Так как a_string уже существует, __set не вызывается.Мой вопрос, наконец, таков: как я могу выполнить эту операцию конкатенации?
Примечание: Хорошо ... Мерфи пришел и дал мне ответ, как только я разместил это ...
Ответ (как я понял) заключается в том, что PHP не может решить, доступна ли a_string , поскольку я не определил метод __get ().
Определение __get () позволяет php найти текущее значение a_string , а затем использует __set () для конкатенации значения.