Current Location: Home> Latest Articles> PHP Iterator Pattern Explained: Practical Guide in Object-Oriented Programming

PHP Iterator Pattern Explained: Practical Guide in Object-Oriented Programming

M66 2025-09-15

Overview of the PHP Iterator Pattern

The Iterator Pattern is one of the common design patterns in object-oriented programming. It provides a unified way to traverse elements in a container object without exposing its internal structure. In PHP development, the Iterator Pattern is often used for traversing collection objects, making code more flexible, extensible, and easier to read.

Introduction to the Iterator Interface

In PHP, the core of the Iterator Pattern is the Iterator interface. This interface defines five methods: rewind(), valid(), current(), key(), and next(). Let's look at a practical example to see how the iterator works.

Implementing a Custom Iterator Class

Suppose we have a list of students, where each student has a name and an age. To use the Iterator Pattern, we first create a class that implements the Iterator interface:

class StudentIterator implements Iterator {
    private $students;
    private $position;

    public function __construct($students) {
        $this->students = $students;
        $this->position = 0;
    }

    public function rewind() {
        $this->position = 0;
    }

    public function valid() {
        return isset($this->students[$this->position]);
    }

    public function current() {
        return $this->students[$this->position];
    }

    public function key() {
        return $this->position;
    }

    public function next() {
        $this->position++;
    }
}

Here, $students holds the array of students and $position tracks the current position. By implementing the interface methods, we can traverse the collection step by step.

Defining the Student Class

Next, we define a simple Student class:

class Student {
    private $name;
    private $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    public function getName() {
        return $this->name;
    }

    public function getAge() {
        return $this->age;
    }
}

This class contains two properties, name and age, along with their getter methods.

Using the Iterator to Traverse Students

With both classes ready, we can now use the iterator to loop through the student list:

$students = [
    new Student('Tom', 18),
    new Student('Jerry', 17),
    new Student('Alice', 19),
];

$studentIterator = new StudentIterator($students);

foreach ($studentIterator as $key => $student) {
    echo 'Name: ' . $student->getName() . ', Age: ' . $student->getAge() . PHP_EOL;
}

Here, the foreach loop automatically calls the methods of the iterator, outputting each student's name and age in order.

Conclusion

The Iterator Pattern is widely used in PHP object-oriented programming. By implementing the Iterator interface, we can easily traverse various container objects. This approach makes code cleaner, more readable, and highly extensible. If you need to handle arrays or similar data structures elegantly in your projects, the Iterator Pattern is a great choice.