用回退给变量赋条件的最简单方法


Simplest Method to Conditionally Assign Variable With Fallbacks

我经常发现自己检查多个函数来确定变量的正确值,但我不认为我这样做是最有效的。

目前

$var = false;
if($var = first_function_to_check()){
    do_this_thing($var);
} elseif($var = fallback_function_to_check()){
    do_this_thing($var);
}

如果first_function_to_check返回一个值,我就设置好了,但如果返回false,我想检查fallback_functon_to_check。如果返回值也为false,则该变量仍被设置为false。

我经常使用类似的东西,但我知道必须有一个更好的速记方法,这样我就不会有多行引用do_this_thing()用于相同的目的

以下内容如何:

$var = false;
if(first_function_to_check($var) || fallback_function_to_check($var)){
    do_this_thing($var);
}
function first_function_to_check(&$var)
{
    // some condition that means you return true
    if(some_condition){
        $var = 'abc'
    }
    return $var; // either true or false 
}
function fallback_function_to_check(&$var)
{
    // some other condition that means you return true
    if(some_other_condition){
        $var = 'xyz'
    }
    return $var; // either true or false
}

这里有两点需要注意:

1)函数签名定义为(&$var),符号为&。这意味着该值作为引用传递,这意味着函数对$var所做的任何更改都将反映在函数外部。因此,以前您将值返回给$var的地方,不再需要将变量传递给函数,因此它可以在内部重新分配其值。这意味着当您将$var传递给do_this_thing()时,它的值是您的函数使其成为的值。

2)如果first_function_to_check($var)返回false,代码将只进入fallback_function_to_check($var)。因此,从第1点开始,只有当first_function_to_check($var)返回false时,$var才会受到fallback_function_to_check($var)的影响。

当然,如果两者都返回false,则永远不会调用do_this_thing($var),并且$var仍然为false。