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 并且无法控制函数的内部工作,但一般的建议仍然有效
只是一个关于最佳实践的奇怪 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 并且无法控制函数的内部工作,但一般的建议仍然有效