首页 > 其他 > 网站日记>正文

帝国cms列表模板中php运算顺序问题

提示: 阅读权限:公开  

错误写法一:

$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,老老实实参加了运算,逻辑是对的。

然而,因了三目运算符的级别太低,低于(.)连接符,导致第三个目实非所愿。运算符优先级和结合属性比较复杂,所以我们为了不出问题,感觉没有把握的地方,使用圈地符()好了。          

上一篇:帝国cms批量添加tags的函数改良

下一篇:jiuhecai谈帝国cms 生成首页函数是怎样的?如何二开?

tags: 帝国cms php 帝国

返回首页

相关

热门

站内直通车

[!--temp.bottomnav--]
返回顶部