PHP イテラブル
PHP - イテラブルとは?
イテラブルは、foreach()
でループできる任意の値です。
iterable
疑似型はPHP7.1で導入され、関数の引数と関数の戻り値のデータ型として使用できます。
PHP - イテラブルの使用
iterable
キーワードは、関数の引数のデータ型または関数の戻り型として使用できます。
例
反復可能な関数引数を使用します。
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a", "b", "c"];
printIterable($arr);
?>
例
イテラブルを返します。:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
PHP - イテラブルの作成
配列
すべての配列は反復可能であるため、任意の配列を反復可能を必要とする関数の引数として使用できます。
イテレータ
Iterator
インターフェイスを実装するオブジェクトは、反復可能を必要とする関数の引数として使用できます。
イテレータにはアイテムのリストが含まれ、それらをループするメソッドが提供されます。リスト内の要素の1つへのポインターを保持します。リスト内の各アイテムには、アイテムを見つけるために使用できるキーが必要です。
イテレータには次のメソッドが必要です。
current()
- ポインターが現在指している要素を返します。任意のデータ型を使用できます。key()
リスト内の現在の要素に関連付けられているキーを返します。整数、浮動小数点数、ブール値、または文字列のみを指定出来ます。next()
ポインタをリスト内の次の要素に移動します。rewind()
ポインタをリストの最初の要素に移動します。valid()
内部ポインターがどの要素も指していない場合 (たとえば、next()がリストの最後で呼び出された場合)、これはfalseを返す必要があります。それ以外の場合はtrueを返します。
例
Iteratorインターフェイスを実装し、 iterableとして使用します。
<?php
// Create an Iterator
class MyIterator implements Iterator {
private $items = [];
private $pointer = 0;
public function __construct($items) {
// array_values() makes sure that the keys are numbers
$this->items = array_values($items);
}
public function current() {
return $this->items[$this->pointer];
}
public function key() {
return $this->pointer;
}
public function next() {
$this->pointer++;
}
public function rewind() {
$this->pointer = 0;
}
public function valid() {
// count() indicates how many items are in the list
return $this->pointer < count($this->items);
}
}
// A function that uses iterables
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
// Use the iterator as an iterable
$iterator = new MyIterator(["a", "b", "c"]);
printIterable($iterator);
?>
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。