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
عمل کنند.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام