在这里,我有一个具有挑战性的PHP函数,该功能应返回可遍历的实例(迭代器(,还需要满足其他测试此功能的断言。
函数没有错误,它计算斐波那契数。可以修改该功能,它是专门构建的,以挑战他人。但是有一个限制,只有标记为!!!(三重感叹号(可以更改。
public function getFibonacci($n) {
$n2 = -($n1 = 1);
while ($n --> -1) {
$r = $n1 += $n2 and 0 or !!![$n + 1 => $n1];
$n2 = $n1 - $n2;
}
return $r;
}
这是一个将测试getfibonacci函数
的phpunit代码assertTrue(
($res = (getFibonacci(8))
&& ($res instanceof Traversable)
&& count($arr = iterator_to_array($res)) === 9
&& array_keys($arr) == range(8, 0, -1)
&& array_values($arr) == [0, 1, 1, 2, 3, 5, 8, 13, 21]
);
非常期望添加一些代码而不是!!!(三重感叹号(,以便断言会通过。
这是一个生成器函数
发电机委托通过
的产量在PHP 7中,生成器授权允许您使用关键字的收益率从另一个生成器,可遍布对象或数组中产生值。然后,外部发电机将从内部发电机,对象或数组中产生所有值,直到不再有效,之后将在外部发电机中继续执行。
如果发电机与产量一起使用,则表达式的产量也将返回内部发电机返回的任何值。
$r = $n1 += $n2 and 0 or !!![$n + 1 => $n1];
ps:在PHP中,逻辑运算符的优先级最低。因此,此字符串等于
$r = $n1 += $n2;
!!![$n + 1 => $n1];