1

ベスト プラクティスに関する奇妙な PHP の質問です。次の関数を想定します。

function get_option($val) {
  return false;
}

$localeこの関数から返された値を変数に割り当て、false の場合はデフォルト値に設定したいと考えていますen_GB。この目標を達成するための 2 つのオプションを発見しました。

1st Option:
$locale = ( $locale = get_option( 'language_code' ) ) ? $locale : 'en_GB';

2nd Option:
$locale = get_option( 'language_code' ) ? get_option( 'language_code' ) : 'en_GB';

どちらがより正しいのか、その理由を知りたいです。

ありがとう

4

3 に答える 3

2

どちらも私には少し冗長に思えます。計算の重複を避けるために、最初のものを好むでしょう (おそらく 2 行のコードに分割されています)。

ヘルパー関数を作成できます。これはfalseハードコーディングされていますが、パラメーターとして渡すこともできます。

function use_default_false($var, $default) {
    return ($var !== false) ? $var : $default;
}

次に、コードは次のようになります。

$locale = use_default_false(get_option('language_code'), 'GB');

PHP5.3 以降では、省略形の三項演算子を使用できます?:

左側の引数が真であるかどうかをチェックすることに注意してください。これにより、チェックしている有効な値がfalse と評価された場合は使用できなくなります(例: 0"""0"array()...)。そのため、一般的にはお勧めしませんが、この場合、ロケールは空"0"でも文字列でもないと想定しているので、問題ないはずです。

$locale = get_option('language_code') ?: 'GB';

PHP7 では、 null 合体演算子 を使用できます??

チェックするNULLため、関数によって返されるデフォルト値を変更する必要があります。

$locale = get_option('language_code') ?? 'GB';
于 2015-12-07T13:41:47.030 に答える
-1

私は2番目のものを好むだろう

基本的に ifget_option( 'language_code' )が true を返したら、 get_option( 'language_code' )else 他のオプションを実行します。

理解しやすく、保守しやすいです。

重複コードの問題については、これに似たものを使用してください。

さらにコードを投稿する必要がありますが、より良い方法は次のとおりです。

var var1 = null;
function get_option( somevar ){
if (var1  != null) {
            return true;
        } else {
              var1  = do some stuff;
              return true;
        }
}

そして、このように関数を呼び出します

$locale = get_option( 'language_code' ) ? var1 : 'en_GB';
于 2015-12-07T13:05:20.173 に答える