这个是一个技巧.
对于||操作,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;