【问题标题】:PhpStorm won't recognize the methods of my objectPhpStorm 无法识别我的对象的方法
【发布时间】:2014-12-17 23:01:18
【问题描述】:

我正在 PhpStorm 中编写一些面向对象的 PHP 代码,但遇到了问题。

我看到您需要定义这些 PHPDoc cmets,我正在尝试这样做。 QuestionList 是我的“活动”类,MySQLAdapter 是我处理数据库和 SQL 查询的另一个类。

我正在尝试将构造函数 $sql_adapter 参数定义为 MySQLAdapter 以便当我点击 Ctrl + Space 时,我可以看到我的对象的可用功能,但没有任何运气。

第一次使用我的connect() 方法时,IDE 将自动完成方法名称,但在我将sql 字段初始化为$sql_adapter 后,IDE 将无法识别我的$sql 对象的方法。

什么问题,我现在没有使用 PHPDoc 吗?

/**
 * @param QuestionList MySQLAdapter $sql_adapter
 */
public function __construct($sql_adapter){
    $this->questions = array();
    $this->sql = new MySQLAdapter();
    /* autocompletes this one */
    $this->sql->connect();
    $this->sql = $sql_adapter;
    /* won't autocomplete this one */
    $this->sql->connect();
}

【问题讨论】:

  • 检查@param的PHPDoc语法——这是错误的
  • * @param MySQLAdapter $sql_adapter 如果$sql_adapter 必须是MySQLAdapter 类型,则在构造函数定义中输入提示

标签: php phpstorm phpdoc


【解决方案1】:

@param QuestionList MySQLAdapter $sql_adapter 是一个无意义的类型提示。它试图通过 $sql_adapter 的解释告诉 IDE MySQLAdapterQuestionList 类型。这显然没有任何意义。注释必须是:

@param MySQLAdapter $sql_adapter

更好的是,使用 PHP 的类型提示:

public function __construct(MySQLAdapter $sql_adapter) ..

【讨论】:

  • 您确实需要$param 答案和@var 答案两者。 @param 将使$sql_adapter 方法范围变量的自动完成工作,但不适用于$this->sql@var 将使$this->sql 的自动完成工作。
【解决方案2】:

是的,您可以使用 PHPDocs 使其正常工作。

例如对象成员$sql 应该在类中声明和记录:

<?php
class Test {

    /**
     * @var MySQLAdapater
     */
    private $sql;

    /**
     * @param MySQLAdapter $sqlAdapter [description]
     */
    public function __construct(MySQLAdapter $sqlAdapter) {
        $sqlAdapter;    // …is recognized as type MySQLAdapter through @param doc-comment
        $this->sql;     // …is recognized as type MySQLAdapter through @var doc-comment             
    }
}

现在 IDE 将 $this-&gt;sql 的任何用途识别为 MySQLAdapter 类型。

根据@ashnazg 的评论更新示例。

【讨论】:

  • 您确实需要$param 答案和@var 答案两者。 @param 将使$sql_adapter 方法范围变量的自动完成工作,但不适用于$this-&gt;sql@var 将使 $this-&gt;sql 的自动完成工作。
猜你喜欢
  • 2017-07-24
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 2017-05-25
  • 2015-10-28
  • 2020-11-28
  • 2019-07-02
  • 2019-01-16
相关资源
最近更新 更多