错误写法一: $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,老老实实参加了运算,逻辑是对的。 然而,因了三目运算符的级别太低,低于(.)连接符,导致第三个目实非所愿。运算符优先级和结合属性比较复杂,所以我们为了不出问题,感觉没有把握的地方,使用圈地符()好了。
|