-1

是我一个人,还是让赋值的优先级高于任何其他运算符只是奇怪?我刚刚遇到的 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;
    }

调用此函数的目的是检查字符串是否包含 AZ 范围内的所有字符(如果有更好的方法,很高兴听到它们)。关键部分是$result = $result && FALSE我认为会评估右侧FALSE然后分配$result该值的部分。

但是没有。这个小错误/功能需要一些跟踪。

似乎$result = $result首先执行分配,然后执行操作TRUE && FALSE;。实际上,我必须给出明确的指示才能说出$result = ($result && FALSE);这看起来很奇怪。

无论如何,我不明白这有什么特别有用的“功能”?有什么想法还是我错过了一些非常基本的东西?

4

2 回答 2

1

如果有更好的方法,很高兴听到它们

ctype_upper()

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

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

如评论中所述,尽早失败

于 2012-11-15T18:34:48.767 回答
0

字符不是 PHP 中的整数,您需要对它们调用ord才能与数字文字进行有意义的比较。

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

所以你的代码真正的问题是它永远不会进入最里面if

于 2012-11-15T18:27:06.793 回答