-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では文字はintではありません。数値リテラルと有意義な比較を行うには、文字に対してordを呼び出す必要があります。

より良い方法に関する限り、どうpreg_match()ですか^[A-Z]*$

したがって、コードの本当の問題は、コードが最も内側に入らないことifです。

于 2012-11-15T18:27:06.793 に答える