PHP If Shorthand Best Practice

Просто странный вопрос 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';

Я хотел бы знать, какой из них является более правильным и почему.

Спасибо

1

Решение

И то, и другое кажется мне многословным, чтобы избежать дублирования вычислений, я бы предпочел первый (возможно, разделенный на 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';
2

Другие решения

Второй вариант лучше, но еще лучше будет использовать стенография троичная

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

Если ваша функция возвращает только строки локали или false, это правильное решение (и оно не требует PHP7).

Тем не менее, как уже упоминалось в комментариях, может быть идея вернуть значения по умолчанию непосредственно из get_option функция для более архитектурного решения. Это означает, что вызывающий не несет ответственности за установку по умолчанию.
Просто прочитайте, что вы используете WordPress и не можете контролировать внутреннюю работу функции, но совет в целом остается в силе

3

Я бы предпочел второй

в основном если 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';
-1
По вопросам рекламы [email protected]