假设我们有2个函数.首先返回一个包含0..N元素的数组,第二个返回只需返回第一个元素或者NULL如果没有任何元素.
假设我们有这样的代码:
/**
* return stdClass[]
*/
function foo()
{
return ...;
}
/**
* return stdClass|null
*/
function bar()
{
$arr = foo();
if ($arr) {
return $arr[0];
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,执行起来bar()很无聊.
如果我使用.NET然后我会使用arr.FirstOrDefault()方法,它将完美地适合任务.
什么是在PHP中最优雅的方式?
PS:不接受产生任何警告或通知的答案.以及@用于抑制错误的那些
您可以使用current()它,假设foo()不更改数组指针(next()例如使用),再加上三元运算符:
return current(foo()) ?: null;
Run Code Online (Sandbox Code Playgroud)
如果您的数组中有标量符号,这显然会产生奇怪的结果false,但如果所有元素都是对象,它们将正常工作.
或者,为防止foo()您所做的修改,也可以使用reset():
return reset((foo())) ?: null;
Run Code Online (Sandbox Code Playgroud)
警告
注意上面代码中的额外括号,它们不是多余的,而是基于语言的特殊性 ; 这种行为将来可能会改变,所以你不应该依赖它.引入临时变量会更安全.