在主题类中找不到PhpStorm方法

时间:2019-03-16 12:40:26

标签: php phpstorm

我有一个单独的类来建立PDO连接:

class Core {
    public $dbh; // handle of the db connection
    private static $instance;

    private function __construct()  {
        // building data source name from config
        $dsn = 'mysql:host=' . Config::read('db.host') . ';dbname=' . Config::read('db.basename') . ';port=' . Config::read('db.port') .';charset=' . Config::read('db.charset') . ';connect_timeout=15';
        //echo '$dsn is '.$dsn;

        // getting DB user from config
        $user = Config::read('db.user');

        // getting DB password from config
        $password = Config::read('db.password');

        $this->dbh = new PDO($dsn, $user, $password);
        $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this->dbh->exec("set names utf8mb4");
    }

    public static function getInstance() {
        if (!isset(self::$instance)) {
            $object = __CLASS__;
            self::$instance = new $object;
        }
        return self::$instance;
    }

    /** @method PDO */
    public function getPdo() {
        $core = $this->getInstance();
        $pdo = $core->dbh;
        return $pdo;
    }
}

现在,每次我在另一个类(例如$compared_text = Core::getInstance()->getPdo()->query($query_text)->fetchColumn();)中从数据库读取或写入数据库时​​,即使一切正常,PhpStorm都会对方法{说“在主题类中找不到引用的方法” {1}}。

我在Stackoverflow上搜索并找到了一些建议使用PhpDocs的答案,并且,正如您所看到的,我在函数getPdo()之前添加了注释/** @method PDO */,但它仍然抛出此警告。有什么问题吗?

UPD

如果我写getPdo(),警告就会消失。

所以现在我的问题如下:

在从每个方法调用之前,无需显式编写$compared_text = Core::getInstance()->Core::getPdo()->query($query_text)->fetchColumn();,是否可以消除警告?如果没有,我将忽略该警告(不过不想将其禁用)。

1 个答案:

答案 0 :(得分:1)

像这样注释getInstance()方法的返回类型

/**
 * @return Core
 */
public static function getInstance() {
    if (!isset(self::$instance)) {
        $object = __CLASS__;
        self::$instance = new $object;
    }
    return self::$instance;
}

IDE将读取该注释。