在PHP中返回第一个非空函数结果的简写

时间:2018-02-01 07:54:42

标签: php

我们假设我有两个函数getData1()getData2(),它们都返回一个可能为空的数组。

现在我想制作第一个尝试getData1()的第三个函数。如果返回值不为空,则新函数应从getData1()返回值,否则应该尝试getData2(),如果该值为空,则返回空数组。

我试过

return getData1() || getData2() || [];

但我没有获得getData1()getData2()的返回值,而是获得truefalse

显然我可以做到

$x = getData1();
if( empty($x) ) $x = getData2();
return $x;

return !empty(getData1()) ? getData1() : getData2();

但我很好奇是否有办法像第一句话那样构建更优雅的东西(那个不起作用的东西)?

1 个答案:

答案 0 :(得分:3)

如果你想要一个单行,你可以使用双三元表达式:

return getData1() ?: (getData2() ?: []);

空数组的计算结果为false,因此您不需要empty().您也可以跳过三元表达式的第二个参数,因为这将是第一个的结果:在此case数组 - 这是你想要的 - 但你不能用empty(),因为它会给你一个布尔值。

如果函数总是返回数组 - 空或不 - 你只需要:

return getData1() ?: getData2();

现在如果getData2()也为空,它将返回该结果,一个空数组。