Параметр PHP4 по ссылке? - PullRequest
       23

Параметр PHP4 по ссылке?

2 голосов
/ 01 июня 2011

Я довольно привык к PHP5, но мне нужно написать скрипт синхронизации PHP4, сейчас я занимаюсь поиском различий между PHP5 и 4. Проблема в том, что я получаю много противоречий, некоторые сайты говорят мне, что PHP4 не имеет ничего общего, и другие говорят мне, что эта проблема возникает только при использовании foreach ..

Для пояснения примера:

function doSomething()
{
    $aMyAr = array();
    $oUser = new User();

    addUser($aMyAr, $oUser);
}

function addUser($aDestArray, $oUser)
{
    $aMyAr[] = $oUser;
}

Я знаю, что вы будете думать, почему бы вам не запустить этот скрипт самостоятельно и вывести вывод / print_r? Ну, по некоторым причинам PHP4 не будет работать в последних версиях WAMP / XAMPP (да, я пробовал кучу версий apache, которые, как говорили, были совместимы ...)

1 Ответ

3 голосов
/ 01 июня 2011

Изменением было только то, что в 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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...