gpt4 book ai didi

php - 捕获未知的命名参数错误

转载 作者:行者123 更新时间:2023-12-03 07:51:47 24 4
gpt4 key购买 nike

缺少参数的函数会抛出 ArgumentCountError错误

ArgumentCountError: Too few arguments to function ...


而未知的命名参数只会引发一般错误

Error: Unknown named parameter ...


我只想捕获这两个错误,到目前为止我有以下
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用法
try {
$dynamicFoo(...$args);

} catch (UnknownNamedParameterError $error) {
// if needed, a check to confirm the error happened in foo
if (($error->getTrace()[0]["function"] ?? null) === $dynamicFoo) {
// Hacky but whatever

}
}

最佳答案

Shouldn't Unknown named parameter get it's own error.


也许吧,但有人需要先阐明为什么这是一个好主意的原因。
对控制流使用异常是其中一种听起来不那么糟糕的事情,但对于试图维护软件的人来说却是非常令人讨厌的惊喜。
考虑以下代码,其中当命名参数调用函数时会出现 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, $param2, $surprise) {...}
但是我们忘记在函数 foo 中调用 bar() 的地方进行适当的更改。所有用户的代码都会失败,他们会收到误导性的错误消息,这是非常令人惊讶的行为。
或者简单地说,捕获由不正确的命名参数引起的异常并不是一件安全的事情,因此 PHP 核心不会假装它是。

What alternative approaches do I have?


您应该在尝试使用数据之前对其进行验证,而不是 try catch 异常来处理不良数据。

关于php - 捕获未知的命名参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64530814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com