假设我有两个函数,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();
但我很好奇,是否有一种方法可以构造出更优雅的东西,比如第一条语句(不起作用的语句)?
发布于 2018-02-01 07:57:53
如果您想要一行,可以使用双三元表达式:
return getData1() ?: (getData2() ?: []);
空数组的计算结果为false
,因此不需要empty().
,也可以跳过三元表达式的第二个参数,因为这将是第一个表达式的结果:在这种情况下,数组--这正是您想要的--但是您不能在empty()
中使用它,因为它会给您一个布尔值。
如果函数总是返回数组--不管是否为空--您只需要:
return getData1() ?: getData2();
现在,如果getData2()
也是空的,它将返回这个结果,一个空数组。
https://stackoverflow.com/questions/48557809
复制相似问题