错误写法一:
$listtemp=' <li class=" '.$no%2==0?'right':'left'.' "><a
href="[!--titleurl--]">[!--title--]</a>
[!--newstime--]</li>';
出来的效果以及源代码,该有的“标题“没有出现
正确的写法:
$listtemp=' <li class=" '.($no%2==0?'right':'left').' "><a href="[!--titleurl--]">[!--title--]</a> [!--newstime--]</li>';
不带括号,会出现语法歧义。
系统会理解为:
$listtemp=(' <li class=" '.$no) %2==0?'right':('left.' "><a href="[!--titleurl--]">[!--title--]</a> [!--newstime--]</li>');
这是因为,%运算符是这个表达式中优先级最高的,而且是左结合的。(优先级依次是 %左,.左,==无,?:左,=右)
因为 ' <li class=" '.$no 转换为数字类型后,总是0,所以6楼的代码,全是right。
再看错误代码二:
$listtemp=' <li class=" '.$style=$no%2==0?'right':'left'.' "><a href="[!--titleurl--]">[!--title--]</a> [!--newstime--]</li> ';
增加了赋值运算等号,赋值运算等号(=)的右结合属性,阻挡了$no的左结合,这样变量$no,老老实实参加了运算,逻辑是对的。
然而,因了三目运算符的级别太低,低于(.)连接符,导致第三个目实非所愿。运算符优先级和结合属性比较复杂,所以我们为了不出问题,感觉没有把握的地方,使用圈地符()好了。