操作数在PHP中的赋值优先级

时间:2012-11-15 18:21:54

标签: php

仅仅是我还是让任务的优先级高于其他任何运算符都是奇怪的? 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);这看起来非常奇怪。

无论如何,我不知道这有什么特别有用的'功能'?任何想法或我错过了一些非常基本的东西?

2 个答案:

答案 0 :(得分:1)

  

如果有更好的方法,那么听到它们会很棒

ctype_upper()

  

似乎首先执行分配,然后执行&amp;&amp;操作

你错了。您对(不正确的)字符对整数的测试和$result在紧密循环中的重新分配的组合感到困惑。

如评论中所述,fail early

答案 1 :(得分:0)

字符在PHP中不是整数,你需要在它们上面调用ord来与数字文字进行有意义的比较。

就更好的方式而言,preg_match()^[A-Z]*$怎么样?

因此,代码的真正问题在于它永远不会进入最里面的if