PhpStorm无法识别类中的PDO方法

Sco*_*lor 5 php pdo phpstorm

不确定如何提出这个问题.但我使用PhpStorm作为我的IDE.

我创建了一个将处理数据库检索和操作的类.在其中我有这个连接方法:

private function connect() {

        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->db;
        $options = [
            PDO::ATTR_PERSISTENT => true,
            PDO::ATTR_ERRMODE    => PDO::ERRMODE_EXCEPTION
        ];
        try {
            $this->conn = new PDO($dsn, $this->user, $this->pass, $options);
        } catch(PDOException $e) {
            $this->error = $e->getMessage();
        }

    }
Run Code Online (Sandbox Code Playgroud)

该方法工作正常,但当我$this->conn在其他方法中使用时,PhpStorm不会识别$this->connPDO对象.

使用此方法:

private function insert() {
        $insert = $this->conn->prepare($sql);
        $insert->execute();
    }
Run Code Online (Sandbox Code Playgroud)

PhpStorm说它无法找到方法prepareexecute.

如果我传入$this->conn方法并在参数上使用PHPDoc块,它工作正常:

/**
 * @param $conn pdo
 */
private function insert($conn) {
    $insert = $conn->prepare($sql);
    $insert->execute();
}
Run Code Online (Sandbox Code Playgroud)

我很好奇它为什么不让我使用$this->conn?虽然传递$this->conn给该方法的代码并不多,但似乎有点多余.

关于我需要采取哪些不同的想法?

Yur*_*rov 12

@var在属性定义之前使用:

/**
 * @var PDO
 */
private $conn;
Run Code Online (Sandbox Code Playgroud)

这样你告诉PhpStorm,以下变量(属性)是类型的PDO.请注意,private这取决于您的代码,这只是一个示例.请查看此内容以了解有关PhpStorm中的PHP文档注释的更多信息.


edm*_*rce 6

这里正确的做法是声明$ conn类属性并将注释放在那里

例如

myClass {

/**
* @var PDO
*/
private $conn;
Run Code Online (Sandbox Code Playgroud)