如何解决捕获未知的命名参数错误
缺少参数的函数会引发compileSdkVersion 29
targetSdkVersion 29
错误
ArgumentCountError:函数的参数太少了...
而未知的命名参数只会引发一般错误
错误:未知的命名参数...
ArgumentCountError
我有哪些替代方法? function foo(int $bar,int $baz) {}
try {
foo(...$arr); // $arr is always an associative array
} catch (ArgumentCountError $error) {
// ...
} catch (Error $error) {
if (preg_match("/^UnkNown named parameter/",$e->getMessage())) {
// ...
} else {
throw $error;
}
}
不应该得到自己的错误。
编辑:
UnkNownNamedParameterError
解决方法
不是未知的命名参数会得到它自己的错误。
也许是,但是有人需要先阐明一个好主意的理由。
使用控制流异常是听起来不错的事情之一,但是对于试图维护软件的人来说却是一个令人讨厌的惊喜。
考虑以下代码,当通过命名参数调用函数时,出现ArgumentCountError:
function foo($param1,$param2)
{
$values = [
'param1' => $param1,'param2' => $param2,'param3' => 'john'
];
bar(...$values);
}
function bar($param1,$param2,$param3) {...}
try {
foo(...$userInput);
}
catch (ArgumentCountError $ace) {
// tell the user they have sent the wrong parameters.
}
到目前为止一切顺利。现在,假设功能栏的签名更改为:
function bar($param1,$surprise) {...}
但是我们忘记在foo函数中调用bar()的地方进行适当的更改。该代码将对所有用户都失败,并且会给他们一个误导性的错误消息,这是非常令人惊讶的行为。
或者简单地说,捕获由不正确的命名参数引起的异常并不是一件安全的事情,因此PHP核心不假装是这样。
我有哪些替代方法?
您应该先尝试验证数据,然后再尝试捕获异常以处理不良数据。
,我同意应该为此自定义例外。无论如何,关于您的解决方案,我现在想不出任何其他选择。但是,在某些情况下,PHP抛出ArgumentCountError
时会出现命名参数。
-
未传递必需参数
-
某些内部可变参数函数不支持额外的命名args
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。