6

当您需要检查数组中是否有任何值时,如果没有 - 为变量设置默认值,您可以执行以下操作

$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';
4

0 回答 0