Я скопировал код руководства по PHP:
http://php.net/manual/en/language.generators.syntax.php#example-295
function gen_one_to_three() {
for ($i = 1; $i <= 3; $i++) {
// Note that $i is preserved between yields.
yield $i;
}
}
$generator = gen_one_to_three();
foreach ($generator as $value) {
echo "$value\n";
}
Но когда я запускаю этот код в браузере, это приводит к бесконечному циклу:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 … Неустранимая ошибка: допустимый объем памяти 134217728 байт исчерпан (попытался выделить 448 байт)
До Xdebug сообщает мне, что память для сценария была исчерпана.
У меня установлен PHP 5.6.2 на MAMP, почему я испытываю эту ошибку?
Я нашел проблему, потому что все, кто любит меня, используют расширение PHP AOP https://github.com/AOP-PHP/AOP:
Генераторы не будут работать, я открыл вопрос на GitHub https://github.com/AOP-PHP/AOP/issues/93
В моем php.ini
Я изменил это:
extension=aop.so
К этому:
;extension=aop.so
Перезапустил Apache и теперь все работает отлично, как говорится в руководстве. Так что я думаю, что есть ошибка с расширением.
Других решений пока нет …