Php Итератор foreach для свойств объекта - PullRequest
0 голосов
/ 13 июля 2020

Учитывая класс

class Obj {
 public $a =1;
 public $b = 2;
}

и сценарий вроде

$obj = new Obj();

foreach($obj as $key => $value)
    echo $key, $value;

, я могу легко вывести то, что находится внутри объекта, но почему это не работает, если класс такой

class SomeClass() implements Iterator {
...
}

Запрещает ли мне интерфейс Iterator выполнять foreach извне и заставляет ли меня использовать его абстрактные функции для этой цели? Tyvm.

1 Ответ

1 голос
/ 13 июля 2020

Когда класс реализует Iterator, foreach выполняет итерацию по элементам коллекции, которую он представляет. Когда класс не реализует Iterator, он возвращается к итерации по свойствам.

Если вы хотите перебрать свойства этого класса, преобразуйте объект в массив:

foreach ((array)$obj as $key => $value)
    echo $key, $value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...