[英]Using php null safe and null coalescing operators with an array containing anonymous functions
以下代碼按預期工作:
$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, 2, 'addd'));
如果我更新代碼:
return $actions[$action] ?? "Action forbidden";
然后它按預期工作:
// 3) string(16) "Action forbidden"
var_dump(calculate(1, 2, 'addd'));
當然,如果我這樣更新代碼:
return array_key_exists($action, $actions) ? $actions[$action]($num1, $num2) : "Action forbidden";
// 4) string(16) "Action forbidden"
var_dump(calculate(1, 2, 'addd'));
但它失去了空合並的所有好處......
問題
為什么我不能使用以下格式的空合並(或者我缺少什么?):
return $actions[$action]($num1, $num2) ?? "Action forbidden";
您的嘗試是在調用函數的結果上使用空合並運算符。 所以它不會阻止未定義的數組索引或調用結果的空函數。
未來范圍
...
空安全函數調用語法 ($callableOrNull?()) 也在本 RFC 的范圍之外。
因此,這可能會在未來解決,但不在現有設計中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.