当您需要检查数组中是否有任何值时,如果没有 - 为变量设置默认值,您可以执行以下操作
$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:建议主题如何在 PHP 中创建新的运算符?没有回答我的问题,因为那里的用户询问“如何更改 PHP”并创建一个新的运算符。我不需要这个。有一些答案如何在不修改 PHP 的情况下做类似的事情,但它们不适用于数组(我不能$response['fbData']['authResponse']['accessToken']
在函数中传递这样的东西,因为它会生成警告消息)。
Upd2:问题解决了,感谢 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,它会返回它的第一个操作数;否则返回第二个操作数。
$authToken = $response['fbData']['authResponse']['accessToken'] ?? 'any_default_value';
如果请求的数组键不存在 - 它不会生成php notice
!
你也可以像这样使用它,寻找非空值:
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';