Просто странный вопрос 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';
Я хотел бы знать, какой из них является более правильным и почему.
Спасибо
И то, и другое кажется мне многословным, чтобы избежать дублирования вычислений, я бы предпочел первый (возможно, разделенный на 2 строки кода).
Вы можете создать вспомогательную функцию, эта имеет false
жестко запрограммирован, но вы даже можете передать его в качестве параметра:
function use_default_false($var, $default) {
return ($var !== false) ? $var : $default;
}
Тогда ваш код становится:
$locale = use_default_false(get_option('language_code'), 'GB');
Начиная с PHP5.3 вы можете использовать сокращенный тернарный оператор ?:
,
Имейте в виду, что он будет проверять левый аргумент на достоверность, что не позволяет использовать его, если проверяется правильное значение оценивается как ложный (например.: 0
, ""
, "0"
, array()
…). Из-за этого я бы не стал в общем-то рекомендую, но в этом случае я предполагаю, что локаль является непустой"0"
Строка, так что должно быть в порядке.
$locale = get_option('language_code') ?: 'GB';
С PHP7 вы можете использовать нулевой оператор объединения ??
,
Это проверяет на NULL
поэтому вы должны изменить значение по умолчанию, возвращаемое вашей функцией.
$locale = get_option('language_code') ?? 'GB';
Второй вариант лучше, но еще лучше будет использовать стенография троичная
$locale = get_option('language_code') ?: 'en_GB';
Если ваша функция возвращает только строки локали или false
, это правильное решение (и оно не требует PHP7).
Тем не менее, как уже упоминалось в комментариях, может быть идея вернуть значения по умолчанию непосредственно из get_option
функция для более архитектурного решения. Это означает, что вызывающий не несет ответственности за установку по умолчанию.
Просто прочитайте, что вы используете WordPress и не можете контролировать внутреннюю работу функции, но совет в целом остается в силе
Я бы предпочел второй
в основном если get_option( 'language_code' )
возвращает истину тогда get_option( 'language_code' )
выполнить еще другой вариант.
это легче понять и поддерживать.
для дублирования кода используйте что-то похожее на это:
вам нужно опубликовать еще немного кода, но вот лучший способ сделать это:
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';