EmptyIterator的目的是什么?

Wal*_*ers 5 php iterator

在PHP手册中,有一个名为EmptyIterator的类

手册说的EmptyIterator::rewind()方法:

没有操作,无事可做.

此类的其他方法抛出异常或返回false

空迭代器的目标是什么?

Rab*_*Guy 5

这是一个空对象模式类。它用于字面上什么都不做并实现一个接口,就像该接口的其他对象一样。从长远来看,它使编码更容易。换句话说,因为它不是抽象的,所以我们可以用它创建一个对象并将其方法用作该接口的另一个已实现类。示例(不是我自己的代码,顺便说一句):

interface Animal {
    public function makeSound();
}

class Dog implements Animal {
    public function makeSound() {
        echo "WOOF!";
    }
}

class Cat implements Animal {
    public function makeSound() {
        echo "MEOW!";
    }
}

class NullAnimal implements Animal { // Null Object Pattern Class
    public function makeSound() {
    }
}

$animalType = 'donkey';
$animal;

switch($animalType) {
    case 'dog' :
        $animal = new Dog();
        break;
    case 'cat' :
        $animal = new Cat();
        break;
    default :
        $animal = new NullAnimal();
}
$animal->makeSound(); // won't make any sound bcz animal is 'donkey'
Run Code Online (Sandbox Code Playgroud)

如果没有空对象模式类,那么默认值将不得不做自己的事情并跳过以下代码行。通过创建一个空对象,一切仍然可以做得很好。当我们不希望任何事情发生时,我们就不会让任何事情发生。