这个是一个技巧。
对于操作,php按照顺序判断,当发现了真值后就不再进行其他的判断,如 1 (echo ;test;),echo ;test;是不会执行的,因为第一个表达式是1,后面就不用再判断了,而 0 (echo ;test;)则会看到test的输出
同理,对于操作符,当php发现一个值为假时,就不再继续判断了,因此当$is_index为0时 $is_index ;=0 $where.=; and ;中 后面的$where赋值不会被执行,反之 则会为$where赋值
问题中的代码等效于
if ($is_index ;= 0) $where .= ;AND is_index = ; . $is_index;