Пропуск определенных возвращаемых значений

Задача
Функция возвращает несколько значений, но нам нужны лишь некоторые из них.

Решение
Пропустить переменные позволяет функция list():

// Интересуют только минуты
function time_parts($time) {
return explode(':', $time);
}
list(, $minute,) = time_parts('12:34:56');

Обсуждение
Это похоже на ошибку в программе, но фрагмент кода из раздела «Решение» имеет в PHP полное право на существование. Чаще всего это встречается, когда программист выполняет цикл по массиву с помощью функции each(), но нужны ему только значения массива:

while (list(,$value) = each($array)) {
process($value);
}

Однако оператор foreach позволяет написать более понятный код:

foreach ($array as $value) {
process($value);
}

В целях уменьшения путаницы мы не очень часто прибегаем к этой функциональности, но если функция возвращает много значений, а нужны только одно или два из них, то этот способ может пригодиться. Вот один из таких примеров – поля считываются с помощью функции fgetcsv(), которая возвращает массив, содержащий поля строки.Код выглядит так:

while ($fields = fgetcsv($fh, 4096)) {
print $fields[2] .


"\n"; // третье поле
}

Если это описанная в коде функция, а не встроенная, то можно определить ключи возвращаемого массива в виде строк, поскольку трудно запомнить, например, что элементу 2 соответствует значение 'rank':

while ($fields = read_fields($filename)) {
$rank = $fields['rank']; // третье поле теперь называется rank
print "$rank\n";
}

Однако ниже показан более эффективный метод:

while (list(,,$rank,,) = fgetcsv($fh, 4096)) {
print "$rank\n"; // непосредственно присваиваем $rank
}

Будьте внимательны, чтобы не ошибиться при подсчете количества за-
пятых.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Возвращение более одного значения
Возвращение значений по ссылке
Возвращение информации об ошибке
Вызов переменных функций
Доступ к глобальной переменной внутри функции

Вернуться в раздел: PHP / 6. Функции