איטרבלים ב-PHP

מחפש PHP
שעה ותאריך ב-PHP

מהו Iterable ב-PHP?

ערך חוזר הוא ערך שניתן לחזור עליו. זוהי אפשרות מצוינת לעקוב אחר כמה פעמים עברת לולאה. לדוגמה, אם אתה רוצה לצאת מלולאה לאחר 10 איטרציות, אתה יכול פשוט לעשות זאת באמצעות איטרable.

כיצד להשתמש ב-Iterables ב-PHP

  • איטרבל הוא כל ערך שמתקבל על ידי a foreach לולאה.
  • PHP 7.1 הציג סוג פסאודו-נתונים זה והוא יכול לשמש כסוג נתוני החזרה של פונקציות. כמו כן, הפונקציה יכולה לקבל איטרבלים כארגומנט שלה.

איטרבלים נותנים שיטה פשוטה לעקוב אחר ספירת האיטרציות תוך כדי התמודדות עם לולאות, מה שעשוי להיות שימושי בתרחישים מסוימים. זה עשוי לשמש גם כסוג החזרה של פונקציה, והפונקציה יכולה לקחת איטרבלים כארגומנטים.

כיצד לבדוק אם אובייקט ניתן לחזרה

כדי לקבוע אם אובייקט הוא מופע של ממשקי IteratorAggregate או Iterator, השתמש באופרטור instanceof. לדוגמא:

$obj = new MyClass();
if ($obj instanceof IteratorAggregate || $obj instanceof Iterator) {
  // object is iterable
}

כיצד לבצע לולאה מעל אובייקט שניתן לחזור עליו

אתה יכול להשתמש ב foreach לולאה ללולאה על אובייקט שניתן לחזור עליו. לדוגמה:

$iterable = new MyIterableClass();
foreach ($iterable as $value) {
  // do something with $value
}

יצירת שיעור Iterable משלך

עליך ליישם את ממשק IteratorAggregate וציין את getIterator פונקציה לבניית מחלקה ניתנת לחזרה משלך. לדוגמא:

class MyIterableClass implements IteratorAggregate {
  private $data = array();
  
  public function __construct($data) {
    $this->data = $data;
  }
  
  public function getIterator() {
    return new ArrayIterator($this->data);
  }
}

שאלות ותשובות

ש: מהם הסוגים השונים של איטרבלים ב-PHP?
ת: מערכים, אובייקטים שמיישמים את ממשק Iterator, ואובייקטים שמיישמים את ממשק ה-Traversable הם כולם דוגמאות ל-Iterables ב-PHP.

ש: אתה יכול להסביר את ההבדל ביניהם Iterator ו Traversable ממשקים?
ת: האיטרטור ממשק מציע אוסף של שיטות לחזרה דרך אובייקט, כגון הרצה אחורה, נוכחי, מפתח, הבא ותקף. הממשק ה-Traversable, לעומת זאת, רק אומר שמחלקה ניתנת למעבר ואינה דורשת יישום מתודות ספציפיות. מחלקות מיושמות איטרטור חייבות גם ליישם את ממשק ה-Traversable.

ש: מה התועלת IteratorAggregate מִמְשָׁק?
ת: ממשק IteratorAggregate מאפשר לך לבצע איטרציה על אובייקט על ידי הקמת אובייקט איטרטור חיצוני שיכול לחצות את תוכן הפריט. זה מאפשר לאובייקט ליצור שיטת מעבר משלו ללא צורך ביישום ממשק Iterator. מחלקות שמיישמות ממשק זה חייבות לציין שיטה אחת בשם getIterator, אשר מחזירה מופע של אובייקט ממשק Iterator.

ש: מה ההבדל בין foreach ו for לולאה בעת שימוש באיטרטורים?
ת: ה foreach לולאה תוכננה במיוחד לעבודה עם איטרטורים, היא קוראת אוטומטית ל- rewind שיטה בתחילת הלולאה וה- valid שיטה לבדוק אם יש עוד אלמנטים לחזור עליהם.

The for ניתן להשתמש בלולאה גם עם איטרטורים, אך דורש מהמתכנת לקרוא ידנית ל- rewind, valid, current, key, ו next שיטות בנקודות המתאימות בלולאה.

ש: כיצד להשתמש באיטרטור עם סגירה?
ת: ניתן להשתמש בסגירות כאיטרטורים ב-PHP. כדי לעשות זאת, צור מופע של המחלקה IteratorIterator והזן אותו בסגירה שלך כארגומנט. הסגירה לא צריכה לקחת פרמטרים ולהחזיר מערך המכיל את המפתח והערך הנוכחיים. כדי להפוך את המשתנים החיצוניים לזמינים בתוך הסגר, הסגירה צריכה לכלול בנוסף הצהרת שימוש.

$myArray = [1, 2, 3, 4];
$iter = new IteratorIterator(new ArrayIterator($myArray));
foreach ($iter as $key => $val) {
    echo $val . PHP_EOL;
}

כאן, IteratorIterator המחלקה משמשת לחזרה על ArrayIterator מחלקה אשר לאחר מכן עוברת את פונקציית הסגירה.

תרגילים:

  1. מה הם איטרבלים ב-PHP?
  2. איך חוזרים על מערך באמצעות לולאת for ב-PHP?
  3. איך חוזרים על מערך באמצעות לולאה קדמית ב-PHP?
  4. איך חוזרים על אובייקט באמצעות לולאה קדמית ב-PHP?
  5. איך יוצרים איטרטור למחלקה מותאמת אישית ב-PHP?
  6. כיצד משתמשים ב- yield מילת מפתח ליצירת פונקציית מחולל ב-PHP?

תשובות:

  1. איטרנס הוא אובייקט שניתן לבצע איטרציה (לולאה), כגון מערך או אובייקט.
  2. for ($i = 0; $i < count($array); $i++) { // code to be executed; }
  3. foreach ($array as $value) { // code to be executed; }
  4. foreach ($object as $property => $value) { // code to be executed; }
  5. כדי ליצור איטרטור למחלקה מותאמת אישית, המחלקה חייבת ליישם את Iterator ממשק ולהגדיר את rewind, valid, current, key, ו next שיטות.
  6. function generator() { yield $value1; yield $value2; }
מחפש PHP
שעה ותאריך ב-PHP
en English
X
גלול למעלה