Ответ 1
Удалите &
из &$this
всюду, он не нужен. На самом деле, я думаю, вы можете удалить &
везде в этом коде - это совсем не нужно.
Длительное объяснение
PHP позволяет передавать переменные двумя способами: "по значению" и "по ссылке". Первый способ ( "по значению" ), вы не можете изменить их, другой второй способ ( "по ссылке" ) вы можете:
function not_modified($x) { $x = $x+1; }
function modified(&$x) { $x = $x+1; }
Обратите внимание на знак &
. Если я вызову modified
для переменной, она будет изменена, если я вызову not_modified
, после того, как она вернется, значение аргумента будет таким же.
Старая версия PHP позволила моделировать поведение modified
с помощью not_modified
, выполнив следующее: not_modified(&$x)
. Это "время вызова по ссылке". Он устарел и никогда не должен использоваться.
Кроме того, в очень древних версиях PHP (читайте: PHP 4 и ранее), если вы изменяете объекты, вы должны передать их по ссылке, поэтому используйте &$this
. Это не является ни необходимым, ни рекомендуемым, поскольку объект всегда изменяется при передаче функции, т.е. Это работает:
function obj_modified($obj) { $obj->x = $obj->x+1; }
Это изменит $obj->x
, хотя формально передается "по значению" , но передается дескриптор объекта (например, в Java и т.д.), а не копия объекта, как это было в PHP 4.
Это означает, что, если вы не делаете что-то странное, вам почти никогда не нужно передавать объект (и, следовательно, $this
по ссылке, будь то время вызова или иначе). В частности, ваш код ему не нужен.