داده تكرار پذير داده ايست كه بتوان آنرا بوسيلهforeach() دور زد .بعنوان مثال آرايه از آن نوع ميباشد.
درphp7.1 يك شبه نوع داده بنام iterable معرفي شد، كه در پارامتر توابع و مقدار برگشتي توابع استفاده ميگردد.
كلمه كليديiterable ميتواند براي معرفي نوع داده آرگومان تابع، يا نوع برگشتي آن استفاده گردد.
مثال ـ بگار گيريiterable در آرگومان تابع
<?php function printIterable($myIterable) { foreach($myIterable as $item) { echo $item; } } $arr = ["a", "b", "c"]; printIterable($arr); ?>
نكته ـ اين امكان برايphp7.1 به بالاست ونسخه هاي پائين تر خطا ميگيرند .ميتوانيد براي نسخ پائين كلمه را حذف كنيد واجرا را مشاهده نمائيد.
مثال ـiterable در برگشت تابع
<?php function getIterable():iterable { return ["a", "b", "c"]; } $myIterable = getIterable(); foreach($myIterable as $item) { echo $item; } ?>
آرايه ها ـ همه آرايه ها تكرار پذير هستند، بنابراين آنها ميتوانند آرگومان توابعي باشند كه آنها نيازمند داده تكرارپذيرهستند.
iteratorـ هر شئ كه iterator پياده سازي نمايد، ميتواند تابعي داشته باشد، كه نيازمند داده تكرارپذير است.
يك تكرار كننده شامل ليستي ازآيتم ها و روش هائيكه حلقه زدن را انجام ميدهد، داراي نشانه گر است كه آنرا روي يكي از آيتم ها نگه ميدارد .هرآيتمي از ليست داراي كليد شناسائي است، كه ميتواند براي پيدا كردن آيتم كمك نمايد.
يك تكرار كننده(iterator) بايد داراي متدهاي زير باشد:
current( )ـ ايتمي را برميگرداند كه نشانه روي آن قرار دارد .آن ميتواند هر نوع داده اي باشد.
key( )ـ كليد منتسب به آيتم جاري را برگشت ميدهد .اين كليد را كليد انجمني هم مي نامند.كليد فقط ميتواندintegr,float,boolean وياstring باشد.
next( )ـ نشانه را به آيتم بعدي ليست منتقل ميكند .
rewind( )ـ نشانه گر را به ابتداي ليست منتقل ميكند .
valid( )ـ اگر نشانه گر در خارج از آيتم هاي ليست قرارگيرد false برگشت
ميشود، در غير اينصورتtrue توجه كنيد كه
مثال ـ در اين مثال رابط تكرار كننده پياده سازي وآن در يك تكرار استفاده شده است.
<!DOCTYPE html> <html> <body> <?php // Create an Iterator class MyIterator implements Iterator { private $items = []; private $pointer = 0; public function __construct($items) { // array_values() makes sure that the keys are numbers $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() indicates how many items are in the list return $this->pointer < count($this->items); } } // A function that uses iterables function printIterable(iterable $myIterable) { foreach($myIterable as $item) { echo $item; } } // Use the iterator as an iterable $iterator = new MyIterator(["a", "b", "c"]); printIterable($iterator); ?> </body> </html>