当你需要检查数组中是否有任何值,如果没有 - 设置变量的默认值,你可以这样做
$authToken = isset($response['fbData']['authResponse']['accessToken']) ? $response['fbData']['authResponse']['accessToken'] : null;
我想知道,有什么方法可以让它更具可读性吗?
有三元运算符的简短版本
$authToken = $sourceVar ?: null;
第二次不需要重复源代码,但它不适用于数组,因为如果我使用$response['fbData']['authResponse']['accessToken']
代替$sourceVar
- 我会收到php警告消息。
我可以使用@
$authToken = @$response['fbData']['authResponse']['accessToken'] ?: null;
我听说他们在PHP 5.4
中确实很快“@”,但我不喜欢这样。
我可以使用这样的东西
$a = isset($response['fbData']['authResponse']['accessToken']) ?: null;
但在这种情况下,我会得到TRUE作为结果,isset()
的结果。
所以,也许有人知道,怎么做呢?
Upd1:建议的主题How can I create a new operator in PHP?不能解答我的问题,因为用户会询问“如何更改PHP”并创建新的运算符。我不需要这个。有一些答案如何在没有PHP修改的情况下做类似的事情,但它们对数组不起作用(我不能在函数中传递这样的$response['fbData']['authResponse']['accessToken']
,因为它会生成警告信息)。
更新2:问题已解决,感谢NikiC(请参阅下面的评论)。 想法:如果我将数组元素作为链接传递,Php将不会生成警告消息,因此它让我们有机会使用这样的东西:
function myIsset (&$var, $defaultVal = null) {
return isset($var) ? $var : $defaultVal;
}
$authToken = myIsset($response['fbData']['authResponse']['accessToken']);
UPD2 2015年10月27日: PHP 7有一个新的非常棒的运算符??
(null coalesce运算符)完全解决了这个问题并且是最好的方法:它返回它的第一个操作数,如果它存在且不是NULL;否则它返回第二个操作数。
$authToken = $response['fbData']['authResponse']['accessToken'] ?? 'any_default_value';
如果请求的数组键没有退出 - 它不会生成php notice
!
您也可以像这样使用它,寻找非空值:
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';