【发布时间】:2015-11-05 15:46:57
【问题描述】:
Coalesce 并不是真正正确的词,因为它返回第一个非 NULL 值,但希望它传达了意图。
有没有一种更易读、更简洁的方法来从$arr、$_GET 和$_POST 获取foo 的第一个定义值?
function foo($arr=array())
{
$arr['bar']=isset($arr['bar'])?$arr['bar']:(isset($_GET['bar'])?$_GET['bar']:(isset($_POST['bar'])?$_POST['bar']:NULL));
// ....
}
【问题讨论】:
-
嵌套三元组是一个可怕的想法,无论是从可读性还是可维护性。不,没有捷径可走。您必须使用 isset() 测试每个 var 个体。
-
首先我会使用
$_REQUEST来省去你的麻烦:) -
我通常会考虑可读性而不是简洁性。我不会将这样的三元组组合在一行中。
-
$arr['bar'] = $arr['bar'] ?? $_GET['bar'] ?? $_POST['bar'] ?? NULL;- 仅限 PHP7 - 即将在您附近的服务器上推出:-D -
@Sebas 不想使用
$_REQUEST,因为它包含 cookie。猜猜我可以重新配置 PHP 来改变...