PHP تكرارات
PHP - ما هو قابل للتكرار؟
المتكرر هو أي قيمة يمكن تكرارها باستخدام foreach()
حلقة.
تم iterable
تقديم النوع الزائف في PHP 7.1 ، ويمكن استخدامه كنوع بيانات لوسائط الدالة وقيم إرجاع الدالة.
PHP - استخدام المكرر
يمكن iterable
استخدام الكلمة الأساسية كنوع بيانات لوسيطة دالة أو كنوع إرجاع للدالة:
مثال
استخدم وسيطة دالة قابلة للتكرار:
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a",
"b", "c"];
printIterable($arr);
?>
مثال
إرجاع ما يمكن تكراره:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
PHP - إنشاء الأشياء المتكررة
المصفوفات
جميع المصفوفات متكررة ، لذا يمكن استخدام أي مصفوفة كوسيطة لدالة تتطلب قابلية تكرارية.
التكرارات
يمكن استخدام أي كائن يقوم بتنفيذ Iterator
الواجهة كوسيطة لدالة تتطلب التكرار.
يحتوي المكرر على قائمة بالعناصر ويوفر طرقًا للتكرار من خلالها. يحتفظ بمؤشر إلى أحد العناصر الموجودة في القائمة. يجب أن يحتوي كل عنصر في القائمة على مفتاح يمكن استخدامه للعثور على العنصر.
يجب أن يحتوي المكرر على هذه الطرق:
current()
- إرجاع العنصر الذي يشير إليه المؤشر حاليًا. يمكن أن يكون أي نوع من البياناتkey()
إرجاع المفتاح المرتبط بالعنصر الحالي في القائمة. يمكن أن يكون فقط عددًا صحيحًا أو عددًا عائمًا أو منطقيًا أو سلسلةnext()
ينقل المؤشر إلى العنصر التالي في القائمةrewind()
ينقل المؤشر إلى العنصر الأول في القائمةvalid()
إذا كان المؤشر الداخلي لا يشير إلى أي عنصر (على سبيل المثال ، إذا تم استدعاء next () في نهاية القائمة) ، فيجب أن يؤدي هذا إلى إرجاع false. يعود صحيح في أي حالة أخرى
مثال
نفِّذ واجهة Iterator واستخدمها باعتبارها قابلة للتكرار:
<?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);
?>