3

私はPHPが初めてで、物事を学ぼうとしています。

一時変数の使用を避けることは可能ですか?

<?php

    function get_name()
    {
        // assume that this function return 3 
        // values on different conditions "name0" "name1" or "name2";
    }

    $result =  ( get_name() == "name0" || get_name() == "name1") ? "Primary" : "Secondary" ;
    echo $result;

?>

上記では、get_name()関数を 2 回呼び出しています。つまり、同じ関数を 2 回呼び出しています。

一時変数に保存せずに、1回の呼び出しで同じことを達成することは可能ですか?

一般的に使用されるプラクティスは何ですか?

更新 : 質問をより具体的に編集しました。ほとんどすべての回答に満足しています。この更新が新しい読者に役立つことを願っています。

4

4 に答える 4

11

私はそれをします:

$result =  in_array(get_value(), array(0, NULL), true) ? "Zero" : "One" ;

ドキュメント: in_array

于 2012-08-15T15:21:05.717 に答える
7

これはどう?

$result = get_value() ? "One" : "Zero";

これによりget_value()、ブール値に型キャストされます。 となり、かつとnullなります。0false1true

于 2012-08-15T15:20:51.537 に答える
1

演算子が使用されているため、関数は 2 回呼び出され===、戻り値が正確に0またはの場合にのみ Zero を出力しますがnull、false または空の文字列の場合は出力しません。

一般的なアプローチは

$result =  ( get_value() ) ? "Zero" : "One" ;

ゼロfalseと空の文字列も出力します。

厳密なチェックが必要で、 get_value() が高価な関数であると仮定すると、次のことができます。

$result =  ( in_array(get_value(), array(0, null), true ) ? "Zero" : "One" ;

ここでも 2 つの関数呼び出しがありますが、1 つはin_array関数に対するものです。

結果を一時変数に保存するだけで読みやすくなります。

さらに良いことに、 get_value() 関数から混合結果を返さないでください

于 2012-08-15T15:22:52.650 に答える
0

試す

<? echo (get_value())?"One":"Zero";?>
于 2012-08-15T15:21:38.593 に答える