微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

捕获未知的命名参数错误

如何解决捕获未知的命名参数错误

缺少参数的函数会引发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; } } 不应该得到自己的错误

编辑:

使用UnkNown named parameter

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时会出现命名参数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。