PHP echo未正常输出文本,疑似常量问题?代码是否故障?
问题原因:PHP运算符优先级导致字符串被意外计算
哈哈,这个问题我之前也踩过坑!根本不是常量的锅,纯粹是PHP运算符优先级在搞怪~
为什么会出现这种情况?
在PHP里,加法运算符(+)的优先级比字符串连接运算符(.)要高。这意味着你的代码会先执行所有的数字加法运算,而不是按照你预期的顺序先拼接字符串。
拿你代码里的第一个片段举例:
'rsi_color_by_number '.$i+$di
PHP会先计算$i + $di,然后把前面的字符串'rsi_color_by_number '转换成数字(因为字符串开头不是有效数字,会被强制转成0),最终变成0 + ($i+$di)——前面的文本直接“消失”了。
后面的>'.$i+$di和<'. $i+$di+1也是同样的逻辑,最终只剩下数字运算的结果,加上最后那段? black:#ffffff00,就出现了你看到的1? black:#ffffff00。
修复方案:用括号明确运算顺序
只需要把所有的数字运算部分用括号包起来,强制PHP先计算数字,再和字符串拼接就可以了:
echo 'rsi_color_by_number '.($i+$di).' = rsicoloredbackground >'.($i+$di) .' and rsicoloredbackground <'. ($i+$di+1) .'? black:#ffffff00 \n';
更直观的测试例子
你可以跑一下这段代码感受下差异:
$i = 0; $di = 1; // 错误写法 echo 'rsi_color_by_number '.$i+$di.' = ...'; // 输出 1 = ... // 正确写法 echo 'rsi_color_by_number '.($i+$di).' = ...'; // 输出 rsi_color_by_number 1 = ...
内容的提问来源于stack exchange,提问作者Pepe Yáñez
相关产品推荐
相关产品推荐

