0

私は何か奇妙なことを見つけました...、私は私の関数の最後にこのコードを持っています:

return $class == 3?"red":$class==2?"orange":$class==1?"yellow":"";

さて、$class == 2これが「黄色」を返し、期待どおり「オレンジ」ではありません。誰かが私にこれを説明できますか?

4

4 に答える 4

3

PHP では三項演算子は左結合であるため、括弧を使用する必要があります。結合性とは、「同じ優先順位の演算子が括弧なしでグループ化される」方法です -演算子の結合性より

$class  == 3?"red":($class ==2?"orange":($class ==1?"yellow":""));
于 2013-03-28T08:52:16.020 に答える
2

これは、次のように扱われるためです。

return (($class == 3?"red":$class==2)?"orange":$class==1)?"yellow":"";

したがって、括弧を追加して、正しい使用を強制します。

return $class == 3?"red":($class==2?"orange":($class==1?"yellow":""));
于 2013-03-28T08:54:14.020 に答える
1

私はそのようにコーディングすることは決してありません。コーディングしているときは、コードの一部が何をしているのかをすぐに確認したいと本当に思っています。これはそれをしません、これはあなたに頭痛の種を与えているだけです;-)

多分それを何か明確なものに変更してください:

switch($class) {
    case 1:
        return 'yellow';

    case 2:
        return 'orange';

    case 3:
        return 'red';

    default:
        return '';
}
于 2013-03-28T08:52:56.237 に答える
0

括弧を使用します:

$class  = 2;
echo $class == 3?"red":($class==2?"orange":($class==1?"yellow":""));

出力:orange

于 2013-03-28T08:53:20.737 に答える