PHP生成关键字循环迭代
我正在使用PHP生成器,无法解释这种行为。 这是我试过的代码PHP生成关键字循环迭代,php,generator,yield,post-increment,Php,Generator,Yield,Post Increment,我正在使用PHP生成器,无法解释这种行为。 这是我试过的代码 <!-- language: PHP --> <?php function myfun($num1, $num2, $ctr = 1) { for ($i = $num1; $i <= $num2; $i =+ $ctr) { yield $i; } } echo 'Odd numbers: '; foreach(myfun(1, 7, 2) as $num) {echo $nu
<!-- language: PHP -->
<?php
function myfun($num1, $num2, $ctr = 1) {
for ($i = $num1; $i <= $num2; $i =+ $ctr) {
yield $i;
}
}
echo 'Odd numbers: ';
foreach(myfun(1, 7, 2) as $num) {echo $num;};
?>
有人能解释我这个行为使用PHP收益率,进入一个无限循环吗
结果:奇数:12222222222
注:$i+=$ctr按预期工作
结果:奇数:1357问题在于
=+
操作,您可能想键入+=
,这将实现以下功能:
<?php
function myfun($num1, $num2, $ctr = 1) {
for ($i = $num1; $i <= $num2; $i += $ctr) {
yield $i;
}
}
echo 'Odd numbers: ';
foreach(myfun(1, 7, 2) as $num) {echo $num;};
=+
不是运算符。这将基本上完成$i=$ctr
循环第一次出现时,$i
设置为$ctr
,在本例中为2。在此之后,它将持续设置为2,并且永远不会更高。因此,无限循环。改用+=
。$i=+$ctr
与$i=$ctr
相同+一些数字
基本上是不可操作的。我同意这一点,但为什么1222222而不是1111111??您在第一次迭代中将$I
指定为$num1
,如果未提供,$num1
1是默认值;Remove=1(所以循环定义中的函数myfun($num1,$num2,$ctr)),行为相同!!!在第一次迭代中,$i
等于$num1
,这是()的的第一部分。在第二次迭代(以及所有其他迭代)中,它将被设置为$ctr
(即2)。因此,您会得到一个$i
循环,它是1
,接下来的所有循环都是2
。循环没有结束,因为没有责怪解析器。这里没有什么可抱怨的——无限循环是一个有效的语法结构。这里,+
符号被解释为一元加运算符
,即,$x=10
和$x=+10
在语义上是等价的。解析器无法知道您不是一元加号运算符而是想要编写复合赋值运算符。所以
$i =+ $ctr