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 عمل کنند.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - رویدادها (Events)

JavaScript – رویدادها (Events)

رویدادهای HTML رویدادها در HTML، “اتفاقاتی” هستند که برای عناصر HTML رخ می‌دهند. این اتفاقات می‌توانند ناشی از کار...

بیشتر بخوانید
JavaScript - سازنده‌های شیء (Object Constructors)

JavaScript – سازنده‌های شیء (Object Constructors)

ساخت آبجکت با تابع سازنده (Object Constructor Function) برای ساخت چندین آبجکت مشابه، از تابع سازنده استفاده می‌شود. این...

بیشتر بخوانید
JavaScript - نمایش شیء (Object Display)

JavaScript – نمایش شیء (Object Display)

نحوه نمایش آبجکت‌ها در جاوااسکریپت هنگام نمایش یک آبجکت جاوااسکریپت به صورت مستقیم، خروجی معمولاً به شکل [object Object]...

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

نظرات

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

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