我们假设我有两个函数getData1()
和getData2()
,它们都返回一个可能为空的数组。
现在我想制作第一个尝试getData1()
的第三个函数。如果返回值不为空,则新函数应从getData1()
返回值,否则应该尝试getData2()
,如果该值为空,则返回空数组。
我试过
return getData1() || getData2() || [];
但我没有获得getData1()
或getData2()
的返回值,而是获得true
或false
。
显然我可以做到
$x = getData1();
if( empty($x) ) $x = getData2();
return $x;
或
return !empty(getData1()) ? getData1() : getData2();
但我很好奇是否有办法像第一句话那样构建更优雅的东西(那个不起作用的东西)?
答案 0 :(得分:3)
如果你想要一个单行,你可以使用双三元表达式:
return getData1() ?: (getData2() ?: []);
空数组的计算结果为false
,因此您不需要empty().
您也可以跳过三元表达式的第二个参数,因为这将是第一个的结果:在此case数组 - 这是你想要的 - 但你不能用empty()
,因为它会给你一个布尔值。
如果函数总是返回数组 - 空或不 - 你只需要:
return getData1() ?: getData2();
现在如果getData2()
也为空,它将返回该结果,一个空数组。