PHP Iterable

Apa itu Iterable?

Iterable adalah nilai apa pun yang dapat di-loop melalui foreach() loop.

Tipe semu iterable diperkenalkan di PHP 7.1, dan dapat digunakan sebagai tipe data untuk argumen fungsi dan nilai pengembalian fungsi.

Menggunakan Iterable

Kata kunci iterable dapat digunakan sebagai tipe data argumen fungsi atau sebagai tipe pengembalian fungsi:

Contoh

Gunakan argumen fungsi berupa iterable:

<!DOCTYPE html>
<html>
<body>

<?php
function printIterable(iterable $myIterable) {
  foreach($myIterable as $item) {
    echo $item;
  }
}

$arr = ["a", "b", "c"];
printIterable($arr);
?>

</body>
</html>

Contoh

Fungsi dengan kembalian iterable:

<!DOCTYPE html>
<html>
<body>

<?php
function getIterable():iterable {
  return ["a", "b", "c"];
}

$myIterable = getIterable();
  foreach($myIterable as $item) {
    echo $item;
  }
?>

</body>
</html>

Membuat Iterable

Array

Semua array adalah iterable, jadi array apa pun dapat digunakan sebagai argumen dari fungsi yang membutuhkan iterable.

Iterator

Object apa pun yang mengimplementasikan interface iterator dapat digunakan sebagai argumen dari fungsi yang memerlukan iterable.

Sebuah iterator berisi daftar item dan menyediakan fungsi untuk mengakses item tersebut secara berulang-ulang (dalam loop). Iterable ini menyimpan penunjuk ke salah satu elemen dalam daftar item. Setiap item dalam daftar harus memiliki kunci atau key yang dapat digunakan untuk menemukan item tersebut.

Sebuah iterator harus memiliki metode berikut:

  • current() – Mengembalikan elemen yang saat ini ditunjuk oleh pointer. Ini bisa berupa tipe data apa saja
  • key() – Mengembalikan kunci yang terkait dengan elemen saat ini dalam daftar. Ini hanya bisa berupa integer, float, boolean atau string
  • next() – Memindahkan penunjuk ke elemen berikutnya dalam daftar
  • rewind() – Memindahkan penunjuk ke elemen pertama dalam daftar
  • valid() – Jika penunjuk internal tidak menunjuk ke elemen apa pun (misalnya, jika next() dipanggil di akhir daftar), maka fungsi ini akan mengembalikan nilai false

Contoh

Terapkan interface 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 kata 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 list
    return $this->pointer < count($this->items);
  }
}

// fungsi yang menggunakan iterables
function printIterable(iterable $myIterable) {
  foreach($myIterable as $item) {
    echo $item;
  }
}

// gunakan iterator sebagai iterable
$iterator = new MyIterator(["a""b""c"]);
printIterable($iterator);
?>

Tinggalkan Balasan

Keranjang Belanja0
Keranjang belanja kosong ...
0