使用Intelephense正确调用mysqli的PHP方法

3
这段代码导致我的编辑器的智能感知出现错误提示:
/**
 * Connect to database
 */
public function link() {
    global $config; mysqli_report(MYSQLI_REPORT_ERROR);
    try {
        return new \mysqli($config['db_hostname'], $config['db_username'], $config['db_password'], $config['db_name']);
    } catch (\exception $e) {
        throw new \exception($e->getMessage(), $e->getCode());
    }
}

期望 6 个参数,但只找到了 4 个。intelephense(10005)

我只使用以下方式,是否可以?

return new \mysqli($config['db_hostname'], $config['db_username'], $config['db_password'], $config['db_name'],null,null);

感谢大家的回答,也感谢deceze在捕获异常的错误方法上进行了纠正;
这是修改后的代码:
/**
 * Connect to database
 */
public function link() {
    global $config; mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    try {
        return new \mysqli($config['db_hostname'], $config['db_username'], $config['db_password'], $config['db_name'], ini_get('mysqli.default_port'), ini_get('mysqli.default_socket'));
    } catch (\exception $e) {
        echo 'Cannot connect to a database server'; die();
    }
}

注意,这是用于类内部使用命名空间的...


7
那是什么编辑器和智能提示?因为4个参数是完全有效的,我个人不想将端口设置为“null”。 - Jeff
5
它们是可选参数,有其存在的原因。如果你的IDE/智能感知告诉你这不行,那么它是错误的。 - Jonnix
1
听起来像是一个不现实的破编辑器。 - Dave
3
为什么要捕获异常并立即将其作为新异常重新抛出呢…? - deceze
当我使用Intelephense时,我也遇到了同样的问题。尝试使用Felix Becker的PHP IntelliSense felixfbecker.php-intellisense - Second2None
显示剩余3条评论
1个回答

2
intelephense插件使用PhpStorm的存根。作者已经提交了一个PR来修复这个问题(以及其他带有可选参数的函数):https://github.com/JetBrains/phpstorm-stubs/pull/520
一旦合并并更新存根,您就不应该再收到在vscode中报告的问题。
没有必要更改您的构造函数调用,它是有效的代码,并且将在没有问题的情况下执行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接