Sebuah iterable adalah nilai apa pun yang dapat diulangi dengan menggunakan perulangan foreach()
.
Pseudo-type iterable
diperkenalkan di PHP 7.1 dan dapat digunakan sebagai tipe data untuk argumen fungsi dan nilai pengembalian fungsi.
Kata kunci iterable
dapat digunakan sebagai tipe data dari argumen fungsi atau sebagai tipe hasil dari sebuah fungsi:
Contoh
Gunakan argumen fungsi yang dapat diulang:
<?php function printIterable(iterable $myIterable) { foreach($myIterable as $item) { echo $item; } } $arr = ["a", "b", "c"]; printIterable($arr); ?> //Output : abc
Contoh
Kembalikan iterable:
<?php function getIterable():iterable { return ["a", "b", "c"]; } $myIterable = getIterable(); foreach($myIterable as $item) { echo $item; } ?> //Output : abc
Array
Semua array bersifat iterable, jadi array apa pun dapat digunakan sebagai argumen dari suatu fungsi yang memerlukan iterable.
Iterator
Objek apa pun yang mengimplementasikan antarmuka Iterator
dapat digunakan sebagai argumen dari suatu fungsi yang memerlukan iterable.
Sebuah iterator berisi daftar item dan menyediakan metode untuk mengulanginya. Hal itu membuat penunjuk ke salah satu elemen dalam daftar. Setiap item dalam daftar harus memiliki kunci yang dapat digunakan untuk menemukan item tersebut.
Sebuah iterator harus memiliki metode ini:
current()
– Mengembalikan elemen yang saat ini diarahkan oleh penunjuk. Ini bisa berupa tipe data apa punkey()
– Mengembalikan kunci yang terkait dengan elemen saat ini dalam daftar. Ini hanya dapat berupa integer, float, boolean, atau stringnext()
– Memindahkan penunjuk ke elemen berikutnya dalam daftarrewind()
– Memindahkan penunjuk ke elemen pertama dalam daftarvalid()
– Jika penunjuk internal tidak menunjuk ke elemen apa pun (misalnya, jika next () dipanggil di akhir daftar), ini akan mengembalikan false. Ini mengembalikan true dalam kasus lainContoh
Implementasikan antarmuka Iterator dan gunakan sebagai iterable:
<?php // Buat Iterator class MyIterator implements Iterator { private $items = []; private $pointer = 0; public function __construct($items) { // array_values() memastikan bahwa kuncinya adalah angka $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() menunjukkan berapa banyak item dalam daftar return $this->pointer < count($this->items); } } // Fungsi yang menggunakan iterable function printIterable(iterable $myIterable) { foreach($myIterable as $item) { echo $item; } } // Gunakan iterator sebagai iterable $iterator = new MyIterator(["a", "b", "c"]); printIterable($iterator); ?> //Output : abc