Рекурсивная функция по ссылке - PullRequest
4 голосов
/ 15 октября 2010

Мне нужно рекурсивно повторить комментарии и их детей из коллекции желе в Кохане. Мне было интересно, как я передаю переменную в функцию через ссылку. Я предполагаю, что это будет что-то вроде этого:

function recursive(&$array)
{
    recursive(&$array);
}

Но я не совсем уверен. Так это правильно, или когда я вызываю функцию, мне не нужен амперсанд?

Спасибо.

1 Ответ

10 голосов
/ 15 октября 2010

Вам не нужен амперсанд, когда вы вызываете функцию, потому что вы уже объявили, что она принимает ссылку как параметр, используя амперсанд.

Так что вы просто напишите это:

function recursive(&$array)
{
    recursive($array);
}

На заметку, как правило, следует избегать добавления амперсанда к вызовам функций .Это называется передачей по времени вызова.Это плохо , потому что функция может ожидать, что параметр будет передан по значению, но вы вместо этого передаете ссылку, таким образом, как вы запутываетесь в функции, не зная об этом.Как я уже говорил выше, функция неизменно будет принимать параметр по ссылке, если вы объявите его таковым.Таким образом, это делает ненужным переход по ссылке во время вызова.

В PHP 5.3.0 и новее передача по ссылке во время вызова заставляет PHP выдавать E_DEPRECATED предупреждений, поскольку это устарело (справедливопоэтому).

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