Изменением было только то, что в PHP4 объекты копируются по умолчанию, а в PHP5 они обрабатываются как ссылки по умолчанию. i.e.:
$a = new stdClass();
$a->prop = "original";
$b = $a;
$b->prop = "changed";
echo $a->prop;
# PHP4 outputs "original" because $a and $b are different objects
# PHP5 outputs "changed" because $a and $b are the same object
Когда вы вызываете функцию или используете foreach, в PHP4 объект копируется, а не передается по ссылке.
Чтобы заставить аргументы функции PHP4 работать как PHP5, вам просто нужно передать аргументы функции по ссылке , т.е.:
function someFunc(& $someObject) {
$someObject->prop = "changed";
}
someFunc($a);
echo $a->prop; # prints "changed"
Итак, объектно-ориентированный код PHP4 повсеместно замусорен &
(писать настоящий ОО-код в тот день, это стало очень утомительно!).
Другим примером будет назначение по ссылке. $b =& $a
делает с объектами в PHP4 то, что делает простой $b = $a
в PHP5.
Наконец, есть возвращение по ссылке. Если вы создаете объект внутри функции и хотите вернуть его (а не вернуть его копию), вам нужно определить функцию с помощью &
, т.е. function &someFunc() {}
.
Опять же, PHP документы объясняют синтаксис. Лучше всего на данный момент просто не использовать PHP4!