Bird
Raised Fist0
PHPprogramming~5 mins

Iterator interface implementation in PHP - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the Iterator interface in PHP?
The Iterator interface allows an object to be looped over with foreach by defining methods to access elements one by one.
Click to reveal answer
beginner
Name the five methods that must be implemented when using the Iterator interface.
The five methods are: current(), key(), next(), rewind(), and valid().
Click to reveal answer
beginner
What does the current() method do in an Iterator?
It returns the current element in the collection that the iterator points to.
Click to reveal answer
intermediate
Explain the role of the valid() method in the Iterator interface.
The valid() method checks if the current position is valid, meaning the iterator has not reached the end of the collection.
Click to reveal answer
beginner
Why is implementing the Iterator interface useful in PHP?
It allows custom objects to be used in foreach loops, making code cleaner and easier to read when working with collections.
Click to reveal answer
Which method in the Iterator interface moves the pointer to the next element?
Anext()
Brewind()
Ccurrent()
Dkey()
What does the rewind() method do in an Iterator?
AChecks if the current position is valid
BReturns the current element
CResets the pointer to the first element
DReturns the key of the current element
Which method returns the key of the current element in an Iterator?
Acurrent()
Bkey()
Cnext()
Dvalid()
What should the valid() method return if the iterator has reached the end?
Atrue
Bnull
Cthe last element
Dfalse
Why implement Iterator instead of just using an array?
ATo allow objects to be looped with foreach
BTo make arrays faster
CTo avoid using loops
DTo prevent modifying data
Describe the five methods you must implement when creating a class that implements the Iterator interface in PHP.
Think about how the iterator moves and accesses elements.
You got /5 concepts.
    Explain how implementing the Iterator interface can improve working with custom collections in PHP.
    Consider how foreach works with arrays and how Iterator helps with objects.
    You got /4 concepts.

      Practice

      (1/5)
      1. Which of the following methods is NOT required when implementing the Iterator interface in PHP?
      easy
      A. sort()
      B. current()
      C. next()
      D. rewind()

      Solution

      1. Step 1: Recall Iterator interface methods

        The Iterator interface requires implementing rewind(), current(), key(), next(), and valid() methods.
      2. Step 2: Identify the method not in Iterator

        The sort() method is not part of the Iterator interface; it is unrelated to iteration.
      3. Final Answer:

        sort() -> Option A
      4. Quick Check:

        Iterator methods exclude sort() [OK]
      Hint: Remember: Iterator needs rewind, current, key, next, valid only [OK]
      Common Mistakes:
      • Confusing sort() as part of Iterator
      • Forgetting to implement key() or valid()
      • Thinking rewind() is optional
      2. Which of the following is the correct syntax to declare a class MyIterator that implements the Iterator interface?
      easy
      A. class MyIterator implements Iterator { }
      B. class MyIterator extends Iterator { }
      C. class MyIterator uses Iterator { }
      D. class MyIterator interface Iterator { }

      Solution

      1. Step 1: Recall PHP interface implementation syntax

        In PHP, a class implements an interface using the keyword 'implements'.
      2. Step 2: Check each option's syntax

        class MyIterator implements Iterator { } uses 'implements' correctly. The other options use invalid keywords or syntax.
      3. Final Answer:

        class MyIterator implements Iterator { } -> Option A
      4. Quick Check:

        Use 'implements' keyword for interfaces [OK]
      Hint: Use 'implements' keyword to implement interfaces in PHP [OK]
      Common Mistakes:
      • Using 'extends' instead of 'implements' for interfaces
      • Using 'uses' or 'interface' keywords incorrectly
      • Missing curly braces after class declaration
      3. What will be the output of the following PHP code?
      $items = ['a', 'b', 'c'];
      
      class MyIterator implements Iterator {
          private array $items;
          private int $index = 0;
      
          public function __construct(array $items) {
              $this->items = $items;
          }
      
          public function current() {
              return $this->items[$this->index];
          }
      
          public function key() {
              return $this->index;
          }
      
          public function next(): void {
              $this->index++;
          }
      
          public function rewind(): void {
              $this->index = 0;
          }
      
          public function valid(): bool {
              return isset($this->items[$this->index]);
          }
      }
      
      $iterator = new MyIterator($items);
      foreach ($iterator as $key => $value) {
          echo "$key:$value ";
      }
      medium
      A. a:b c:d e:f
      B. 0:a 1:b 2:c
      C. 0:0 1:1 2:2
      D. Error: Undefined variable

      Solution

      1. Step 1: Understand the iterator implementation

        The class stores items and uses an index to track position. Methods current(), key(), next(), rewind(), and valid() are correctly implemented.
      2. Step 2: Trace the foreach loop output

        foreach uses key() and current() to print "key:value" pairs. Indexes 0,1,2 correspond to 'a','b','c'. Output is "0:a 1:b 2:c "
      3. Final Answer:

        0:a 1:b 2:c -> Option B
      4. Quick Check:

        Iterator keys and values match array indexes and elements [OK]
      Hint: Trace index and current() output for each loop iteration [OK]
      Common Mistakes:
      • Confusing keys with values
      • Forgetting to implement valid() correctly
      • Expecting output without spaces
      4. Consider this broken iterator class:
      class BrokenIterator implements Iterator {
          private array $data = [1, 2, 3];
          private int $pos = 0;
      
          public function current() {
              return $this->data[$this->pos];
          }
      
          public function key() {
              return $this->pos;
          }
      
          public function next() {
              $this->pos++;
          }
      
          public function rewind() {
              $this->pos = 0;
          }
      
          public function valid() {
              return $this->pos < count($this->data);
          }
      }

      What is the main issue that could cause unexpected behavior when using this iterator in a foreach loop?
      medium
      A. The next() method does not have a void return type
      B. The valid() method should use isset() instead of count()
      C. The valid() method returns a boolean but should return an integer
      D. The next() and rewind() methods lack return type declarations

      Solution

      1. Step 1: Check method signatures against Iterator interface

        Iterator interface requires next() and rewind() to have void return type declarations.
      2. Step 2: Identify missing return types

        In the code, next() and rewind() lack ': void' return type, which can cause compatibility issues in strict mode.
      3. Final Answer:

        Missing void return types in next() and rewind() -> Option D
      4. Quick Check:

        next() and rewind() must declare void return type [OK]
      Hint: Check method signatures match interface exactly including return types [OK]
      Common Mistakes:
      • Ignoring return type declarations
      • Thinking valid() must return integer
      • Confusing isset() and count() usage in valid()
      5. You want to create a custom iterator EvenNumbers that iterates over only even numbers from a given array. Which implementation of the valid() method correctly skips odd numbers during iteration?
      hard
      A. public function valid(): bool { return isset($this->items[$this->index]); }
      B. public function valid(): bool { return $this->items[$this->index] % 2 === 0; }
      C. public function valid(): bool { while (isset($this->items[$this->index]) && $this->items[$this->index] % 2 !== 0) { $this->index++; } return isset($this->items[$this->index]); }
      D. public function valid(): bool { return $this->index < count($this->items); }

      Solution

      1. Step 1: Understand the goal of skipping odd numbers

        The iterator must advance the index until it points to an even number or end of array.
      2. Step 2: Analyze each valid() implementation

        public function valid(): bool { while (isset($this->items[$this->index]) && $this->items[$this->index] % 2 !== 0) { $this->index++; } return isset($this->items[$this->index]); } uses a while loop to skip odd numbers by incrementing index, then checks if current index exists. The other options do not skip odd numbers properly.
      3. Final Answer:

        while loop in valid() to skip odd numbers -> Option C
      4. Quick Check:

        valid() must skip odd values to find even numbers [OK]
      Hint: Use a loop inside valid() to skip unwanted elements [OK]
      Common Mistakes:
      • Returning true without skipping odd numbers
      • Not checking if index exists before accessing array
      • Using valid() only to check index range
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard