iterable이란?
PHP 7.1 버전부터 iterable이라는 새로운 의사 타입(pseudo-type)이 도입되었습니다. iterable은 Traversable 인터페이스를 구현한 모든 객체를 받아들일 수 있으며, 대표적인 예로 배열(array)이 있습니다. 이 타입은 foreach 구문과 함께 사용되거나, 한 번에 하나의 값을 생성(yield)하는 제너레이터(generator) 함수와 함께 활용됩니다.
기본 문법
함수의 매개변수 타입을 iterable로 선언하면, 해당 함수는 foreach 문에서 사용할 수 있는 값들의 집합을 인자로 받을 수 있습니다. 만약 전달된 매개변수가 foreach 루프를 지원하지 않으면, PHP 파서는 TypeError를 발생시킵니다.
예제: 매개변수로 iterable 받기
<?php
$arr1=array("PHP","Java","Python");
function myfunc (iterable $arr1){
foreach ($arr1 as $lang){
echo $lang . "\n";
}
}
myfunc($arr1);
?>실행 결과
PHP Java Python
함수의 반환 타입으로 iterable 사용하기
PHP 함수는 배열처럼 반복 가능한(iterable) 데이터 타입을 반환값으로 지정할 수도 있습니다. 반환된 값의 타입을 확인하려면 is_iterable() 함수를 사용합니다.
예제: iterable 반환 타입
<?php
function newfunc ():iterable{
$arr2=[];
for ($i=1;$i<4;$i++){
$arr2[$i]=$i*2;
}
return $arr2;
}
$ret=newfunc();
var_dump (is_iterable($ret));
?>실행 결과
bool(true)
제너레이터와 함께 사용하기
아래는 iterable 반환 타입을 가진 제너레이터 함수의 예제입니다. 제너레이터는 yield 키워드를 통해 값을 하나씩 순차적으로 생성하며, 이 역시 iterable 타입에 해당합니다.
예제: 제너레이터 함수
<?php
function gen(): iterable {
yield 1;
yield 2;
yield 3;
}
gen();
?>지원 버전
iterable 의사 타입은 PHP 7.1에서 처음 도입되었으며, 그 이상 버전에서 모두 사용할 수 있습니다.