Я учусь на ZCPE и в StudyGuide есть следующая цитата:
passing an array in as a function argument, unless you
pass-by-reference using the & operator, a copy is passed and the internal pointer is
always set to the first position, making a call to reset() unnecessary
Итак, я сделал тест:
function test($arr) {
echo current($arr);
}
$arr = array('a','b','c');
next($arr); next($arr);
test($arr);
Выход в test()
функция c
, это означает, что аргумент массива был отправлен как копия, но с внутренним указателем, клонированным в той же позиции, что и массив из глобального пространства.
Документация для PHP5.3, но я не могу найти такое изменение в PHP Manual
,
Возможно, это ошибка, но я не уверен, потому что я не нашел в руководстве информации о том, как указатель поддерживается при передаче аргумента массива в функцию.
Любая информация по этому вопросу будет оценена.
Вы можете передать параметр по ссылке или по копии, например:
Пример 1
function fn($a) {
// some job
}
$a = 5;
fn(&$a); // i choose to pass variable a by referance, instead of my declaration
Пример 2
function fn(&$a) {
// some job
}
fn($a); // will be passed by referance, whatever i do ...
fb(&$a) ; // also by referance : WARNING this has been removed from the new version of PHP !
в официальной документации в php упоминается, что параметр next()
будет автоматически передан по ссылке:
mixed next ( array &$array )
Так что это не ошибка 🙂
Надеюсь, это поможет
Других решений пока нет …