仅仅是我还是让任务的优先级高于其他任何运算符都是奇怪的? PHP中的示例我刚刚遇到:
function test($param1) {
$result = TRUE;
for ($i = 0; $i <; strlen($param1); $i++) {
if (!(ord($param1[$i]) >= 65 && ord($param1[$i]) <=90)) {
$result = $result && FALSE;
}
}
return $result;
}
调用此函数时的意图是检查字符串是否包含A-Z范围内的所有字符(如果有更好的方法可以听到它们)。我认为关键部分是$result = $result && FALSE
会评估FALSE
的右侧,然后将$result
分配给该值。
但不是。这个小错误/功能需要一些追踪。
似乎首先执行$result = $result
的分配,然后执行操作TRUE && FALSE;
的任何一个。
我实际上必须明确指示$result = ($result && FALSE);
这看起来非常奇怪。
无论如何,我不知道这有什么特别有用的'功能'?任何想法或我错过了一些非常基本的东西?
答案 0 :(得分:1)
如果有更好的方法,那么听到它们会很棒
似乎首先执行分配,然后执行&amp;&amp;操作
你错了。您对(不正确的)字符对整数的测试和$result
在紧密循环中的重新分配的组合感到困惑。
如评论中所述,fail early。
答案 1 :(得分:0)
字符在PHP中不是整数,你需要在它们上面调用ord来与数字文字进行有意义的比较。
就更好的方式而言,preg_match()
与^[A-Z]*$
怎么样?
因此,代码的真正问题在于它永远不会进入最里面的if
。