如何理解生成器中的条件语句if ($current%3 == 0 && $current%5 == 0)?
理清FizzBuzz代码中取模与
==的逻辑 嘿,我来帮你拆解这个容易混淆的点~
首先得明确PHP里%(取模运算符)的作用:它会返回被除数除以除数后的余数。比如15 % 3的结果是0,因为15能被3整除,余数为0;7 % 3的结果是1,因为7除以3商2余1。
你提到的第7行代码$current % 3 == 0 && $current %5 ==0,正确的逻辑是:
$current % 3 == 0:判断$current除以3的余数是否为0 → 也就是$current能被3整除$current %5 ==0:判断$current除以5的余数是否为0 → 也就是$current能被5整除&&表示两个条件同时满足时,才会返回"fizzbuzz"
你的误解在于把这句拆成了「$current被3整除且等于0,同时被5整除且等于0」,但实际上==0是和取模运算的结果做比较,不是和$current本身比较。
举个实际的例子:
- 当
$current = 15时,15%3=0、15%5=0,条件成立,返回"fizzbuzz" - 当
$current = 0时,虽然0%3=0、0%5=0(因为0除以任何非零数余数都是0),但通常FizzBuzz的逻辑是从1开始计数的,所以你的代码运行时应该是从1循环到某个数,自然不会触发$current=0的情况,这也是代码能正常运行的原因。
另外,贴一下那段生成器代码的大概结构,方便对照:
function fizzbuzzGenerator($start, $end) { for ($current = $start; $current <= $end; $current++) { if ($current % 3 == 0 && $current % 5 == 0) { yield 'fizzbuzz'; } elseif ($current % 3 == 0) { yield 'fizz'; } elseif ($current % 5 == 0) { yield 'buzz'; } else { yield $current; } } }
总结一下:==在这里是用来验证取模运算的结果是否为0,以此判断当前数是否能被目标数整除,而不是判断当前数本身等于0~
内容的提问来源于stack exchange,提问作者trevorpan
相关产品推荐
相关产品推荐

