如何解决将 php null 安全和 null 合并运算符与包含匿名函数的数组一起使用
以下代码按预期工作:
$array = [];
// null
var_dump($array['foo']->bar ?? null);
// this throws a warning
var_dump($array['foo']?->bar);
--
让我们使用以下代码:
function calculate($num1,$num2,$action)
{
$actions = [
"add" => function ($a,$b) {
return $a + $b;
},"substract" => function ($a,$b) {
return $a - $b;
},"multiply" => function ($a,$b) {
return $a * $b;
},"divide" => function ($a,$b) {
return $a / $b;
}
];
return $actions[$action]($num1,$num2) ?? "Action forbidden";
}
// 1) int(3)
var_dump(calculate(1,2,'add'));
// 2) Warning: Undefined array key "addd"...
var_dump(calculate(1,'addd'));
如果我更新代码:
return $actions[$action] ?? "Action forbidden";
然后它按预期工作:
// 3) string(16) "Action forbidden"
var_dump(calculate(1,'addd'));
当然,如果我这样更新代码:
return array_key_exists($action,$actions) ? $actions[$action]($num1,$num2) : "Action forbidden";
// 4) string(16) "Action forbidden"
var_dump(calculate(1,'addd'));
但它失去了空合并的所有好处......
问题
为什么我不能使用以下格式的空合并(或者我缺少什么?):
return $actions[$action]($num1,$num2) ?? "Action forbidden";
解决方法
您的尝试是在调用函数的结果上使用空合并运算符。所以它不会阻止未定义的数组索引或调用结果的空函数。
未来范围
...
空安全函数调用语法 ($callableOrNull?()) 也在此 RFC 的范围之外。
所以这可能在未来解决,但不在现有设计中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。