我经常发现自己检查多个函数来确定变量的正确值,但我不认为我这样做是最有效的。
目前$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。