PHP – تکرارپذیری (Iterables)

Iterable چیست؟ (What is an Iterable?)

Iterable هر مقداری است که بتوان با یک حلقه foreach() آن را پیمایش کرد.

نوع شبه (pseudo-type) iterable در PHP 7.1 معرفی شد و می‌توان از آن به عنوان نوع داده‌ای برای آرگومان‌های تابع و مقادیر بازگشتی تابع استفاده کرد.

استفاده از Iterables (Using Iterables)

کلمه کلیدی iterable می‌تواند به عنوان نوع داده‌ای یک آرگومان تابع یا به عنوان نوع بازگشتی تابع استفاده شود:

مثال (Example)

استفاده از آرگومان تابع iterable:

<?php
function printIterable(iterable $myIterable) {
  foreach($myIterable as $item) {
    echo $item;
  }
}
$arr = ["a", "b", "c"];
printIterable($arr);
?>

مثال (Example)

بازگرداندن یک iterable:

<?php
function getIterable():iterable {
  return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
  echo $item;
}
?>

ایجاد Iterables (Creating Iterables)

آرایه‌ها (Arrays)

تمام آرایه‌ها iterable هستند، بنابراین هر آرایه‌ای می‌تواند به عنوان آرگومان یک تابع که به iterable نیاز دارد، استفاده شود.

Iterators

هر شیئی که رابط (interface) Iterator را پیاده‌سازی کند، می‌تواند به عنوان آرگومان یک تابع که به iterable نیاز دارد، استفاده شود.

یک iterator حاوی یک لیست از آیتم‌ها است و متدهایی برای پیمایش از میان آن‌ها فراهم می‌کند. این یک اشاره‌گر به یکی از عناصر لیست نگه می‌دارد. هر آیتم در لیست باید یک کلید داشته باشد که بتوان با استفاده از آن آیتم را پیدا کرد.

یک iterator باید این متدها را داشته باشد:

  • current(): عنصری را که اشاره‌گر در حال حاضر به آن اشاره می‌کند، بازمی‌گرداند. این می‌تواند هر نوع داده‌ای باشد.
  • key(): کلیدی را که با عنصر فعلی در لیست مرتبط است، بازمی‌گرداند. این تنها می‌تواند یک عدد صحیح (integer)، شناور (float)، بولین (boolean) یا رشته (string) باشد.
  • next(): اشاره‌گر را به عنصر بعدی در لیست منتقل می‌کند.
  • rewind(): اشاره‌گر را به اولین عنصر در لیست منتقل می‌کند.
  • valid(): اگر اشاره‌گر داخلی به هیچ عنصری اشاره نکند (برای مثال، اگر next() در انتهای لیست فراخوانی شده باشد)، باید false برگرداند. در هر حالت دیگر true را برمی‌گرداند.

مثال (Example)

پیاده‌سازی رابط Iterator و استفاده از آن به عنوان یک iterable:

<?php
// ایجاد یک Iterator
class MyIterator implements Iterator {
  private $items = [];
  private $pointer = 0;
  public function __construct($items) {
    // array_values() اطمینان حاصل می‌کند که کلیدها اعداد هستند
    $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() نشان می‌دهد که چند آیتم در لیست هستند
    return $this->pointer < count($this->items);
  }
}
// یک تابع که از iterables استفاده می‌کند
function printIterable(iterable $myIterable) {
  foreach($myIterable as $item) {
    echo $item;
  }
}
// استفاده از iterator به عنوان یک iterable
$iterator = new MyIterator(["a", "b", "c"]);
printIterable($iterator);
?>

خلاصه

iterable ها در PHP قابلیت پیمایش با حلقه foreach() را دارند و می‌توانند به عنوان نوع داده‌ای برای آرگومان‌ها و مقادیر بازگشتی توابع استفاده شوند. آرایه‌ها و iteratorها نمونه‌هایی از iterableها هستند. iteratorها باید متدهای خاصی را پیاده‌سازی کنند تا بتوانند به عنوان iterable عمل کنند.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.