VSCode Intelepsense 不理解 PDOStatement Extend

问题描述 投票:0回答:1

我正在我的命名空间中扩展 PDO 类,并添加一些额外的方法。但是 intelephense 在问题部分显示未定义的方法错误。

这是我的课

namespace MyNameSpace;

class PDOStatement extends \PDOStatement {

public $dbh;
protected function __construct($dbh) {
    $this->dbh = $dbh;
}

public function getCol() {
    $this->execute();
    return $this->fetchAll(PDO::FETCH_COLUMN);
}
}

这是错误信息:

Undefined method 'getCol'

我在包含我的模型之前包含了我的 PDOStatement 扩展类。 (PDOStatement 扩展类在 pdo.php 里面)

    include_once(PATH.'/sys/pdo.php');
    include(PATH.'/app/models/mymodel.php');

扩展类按预期工作没有问题,但 intelephense 显示我添加到 PDOStatement 类的所有方法的错误。我也在扩展 PDO 类,但它工作正常(intelephense 没有显示我添加到 PDO 类的新方法的任何错误)。我认为这是因为当您调用 pdo->prepare(query) 时 PDOStatement 类是自动创建的,而 intelephense 不理解 PDOStatement 类是扩展的。

这是我的 PDO 扩展课程。

namespace MyNameSpace;
class PDO extends \PDO {
function __construct($dsn, $username="", $password="", $driver_options=array()) {
    parent::__construct($dsn,$username,$password, $driver_options);
    $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('MyNameSpace\PDOStatement', array($this)));
  }
 }
php pdo
1个回答
0
投票

我通过覆盖 PDO prepare 方法找到了解决方案。实际上 PDO 已经在使用我的新 PDOStatement 但由于它作为选项传递,VSCode 无法理解它。这是为了让 VSCode 了解扩展,并在新的扩展 PDOStatement 类上显示所有方法。

public function prepare(string $query, array $options = []) : PDOStatement|false
{ 

    return parent::prepare($query, $options);

}

注意:这里的PDOStatement指的是MyNameSpace\PDOStatement。

© www.soinside.com 2019 - 2024. All rights reserved.