当你需要检查数组中是否有任何值时,如果没有 - 为变量设置默认值,你可以这样做
$authToken = isset($response['fbData']['authResponse']['accessToken']) ? $response['fbData']['authResponse']['accessToken'] : null;
Run Code Online (Sandbox Code Playgroud)
我想知道,有什么方法可以让它更具可读性吗?
有三元运算符的简短版本
$authToken = $sourceVar ?: null;
Run Code Online (Sandbox Code Playgroud)
这里不需要第二次重复源,但它不适用于数组,因为如果我将使用$response['fbData']['authResponse']['accessToken']而不是$sourceVar- 我将获得php警告消息.
我可以用 @
$authToken = @$response['fbData']['authResponse']['accessToken'] ?: null;
Run Code Online (Sandbox Code Playgroud)
我听说他们让"@"真的很快PHP 5.4,但我还是不喜欢这个.
我可以使用这样的东西
$a = isset($response['fbData']['authResponse']['accessToken']) ?: null;
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我将得到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']);
Run Code Online (Sandbox Code Playgroud)
UPD2 10/27/2015: PHP 7有一个新的令人敬畏的运算符??(空合并运算符)完全解决了这个问题并且是最好的方法:它返回它的第一个操作数,如果它存在并且不是NULL; 否则返回第二个操作数.
$authToken = $response['fbData']['authResponse']['accessToken'] ?? 'any_default_value';
Run Code Online (Sandbox Code Playgroud)
如果请求的数组键不退出 - 它不会生成php notice!
您可以像这样使用它,寻找非空值:
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |