Что такое тип iterable PHP 7.1?
я видел некоторые коды, чтобы проверить PHP 7.1, и я нашел следующий фрагмент:
function doLoop(iterable $iterable) {
foreach ($iterable as $value) {
echo $value;
}
}
$data = [1, 2, 3, 4];
doLoop($data);
iterable
, я могу гарантировать, что аргумент, переданный будьте array, но я могу получить в том же результат, если вы это сделаете:
function doLoop(array $iterable) {
foreach ($iterable as $value) {
echo $value;
}
}
$data = [1, 2, 3, 4];
doLoop($data);
Какая разница то на самом деле array
iterable
? Он действительно является своего рода?
1 answers
" Не является типом, это псевдо типа (например, callable
). В зависимости от этого, указывает, что функция принимает в качестве параметра как array
, как и любой объект, который реализует интерфейс Traversable
. То есть, принимает также объекты типа array-like, которые работают в loop foreach
.
, указанное в параметре функции, то же будет принимать значения типа array
, Iterator
, Generator
, etc. Если не указан ни один из этих типов, исключение типа TypeError
стрелять.
function foo(iterable $iterable) {
foreach ($iterable as $value) {
// ...
}
}
Также Может быть использован для определения возвращаемого значения функции:
function bar(): iterable {
return [1, 2, 3];
}
При использовании в параметрах, даже, может иметь значение по умолчанию null
или даже array
пустой.
function foo(iterable $iterable = null) {
// ...
}
В качестве generator
суб-тип Traversable
, следующее является допустимым:
function gen(): iterable {
yield 1;
yield 2;
yield 3;
}
В Основном, чтобы знать, типа iterable
, просто использовать функцию is_iterable
:
var_dump(is_iterable([1, 2, 3])); // bool(true)
var_dump(is_iterable(new ArrayIterator([1, 2, 3]))); // bool(true)
var_dump(is_iterable((function () { yield 1; })())); // bool(true)
var_dump(is_iterable(1)); // bool(false)
var_dump(is_iterable(new stdClass())); // bool(false)
Слово iterable
определяется как зарезервированные слова для имен классов, поэтому классы, интерфейсы и стиль игры не могут быть названы iterable
.
Примечание: что PHP позволяет использовать
foreach
об объектах, итерацию свойств общественного пользования, объект не будет рассматриватьсяiterable
не имеет типTraversable
.
Артикул: PHP RFC: Iterable