1

Just a weird PHP question about best practice. Assuming the following function:

function get_option($val) {
  return false;
}

I want to assign to a $locale variable, the value returned from this function and, if false, set to a default en_GB one. I discovered 2 option for achieving this goal:

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

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

I would like to know which one is more correct and why.

Thanks

4

3 回答 3

3

第二种选择更好,但更好的是使用速记三元

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

如果您的函数仅返回语言环境字符串或false,这是正确的解决方案(并且不需要 PHP7)。

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

于 2015-12-07T13:56:32.573 回答
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';
于 2015-12-07T13:41:47.030 回答
-1

我更喜欢第二个

基本上如果get_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 回答