PHP 的 Shorthand 最佳实践

PHP If Shorthand Best Practce

只是一个关于最佳实践的奇怪 PHP 问题。 假设函数如下:

function get_option($val) {
  return false;
}

我想将此函数返回的值赋给一个 $locale 变量,如果为假,则设置为默认值 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';

我想知道哪一个更正确,为什么。

谢谢

我更喜欢第二个

基本上 if get_option( 'language_code' ) returns true then get_option( 'language_code' ) execute else other option.

更容易理解和维护。

对于重复代码问题,请使用与此类似的方法:

您需要 post 一些更多的代码,但这里有一个更好的方法:

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';

两个对我来说都显得有点冗长,为了避免重复计算,我更喜欢第一个(可能拆分成两行代码)。

您可以创建一个辅助函数,此函数已 false 硬编码,但您甚至可以将其作为参数传递:

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

那么你的代码就变成了:

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

因为 PHP5.3 你可以使用 shorthand 三元运算符 ?:.

请注意,它将检查左侧参数是否为真,如果您检查的有效值 evaluates to false(例如:0"""0"array()...)。因此,我一般不会 推荐它,但在这种情况下,我假设语言环境是一个非空的非 "0" 字符串,所以它应该没问题。

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

有了 PHP7 你可以使用 null coalesce operator ??.

它会检查 NULL,因此您必须更改函数返回的默认值。

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

第二个选项更好,但更好的是使用 shorthand ternary

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

如果您的函数 return 只有语言环境字符串或 false,这是正确的解决方案(不需要 PHP7)。

但是,如评论中所述,直接从 get_option 函数中 return 默认值可能是一个想法,以获得架构更合理的解决方案。这意味着调用者不负责设置默认值。 只是读到你正在使用 Wordpress 并且无法控制函数的内部工作,但一般的建议仍然有效