Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PhpStorm无法识别对象的方法_Php_Phpstorm_Phpdoc - Fatal编程技术网

PhpStorm无法识别对象的方法

PhpStorm无法识别对象的方法,php,phpstorm,phpdoc,Php,Phpstorm,Phpdoc,我正在用PhpStorm编写一些面向对象的PHP代码,遇到了一个问题 我发现您需要定义这些PHPDoc注释,我也在尝试这样做。QuestionList是我的活动类,MySQLAdapter是我处理数据库和SQL查询的另一个类 我试图将constructors$sql\u adapter参数定义为MySQLAdapter,这样当我点击Ctrl+Space时,我就可以看到对象的可用函数,但没有任何运气 第一次使用connect方法时,IDE将自动完成方法名称,但在我将sql字段初始化为$sql\U适

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

我发现您需要定义这些PHPDoc注释,我也在尝试这样做。QuestionList是我的活动类,MySQLAdapter是我处理数据库和SQL查询的另一个类

我试图将constructors$sql\u adapter参数定义为MySQLAdapter,这样当我点击Ctrl+Space时,我就可以看到对象的可用函数,但没有任何运气

第一次使用connect方法时,IDE将自动完成方法名称,但在我将sql字段初始化为$sql\U适配器后,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 QuestionList MySQLAdapter$sql_adapter是一个无意义的类型提示。它试图告诉IDE MySQLAdapter属于QuestionList类型,并解释为$sql\u adapter。这显然毫无意义。注释必须是:

@param MySQLAdapter $sql_adapter
更好的方法是使用PHP的类型提示:

public function __construct(MySQLAdapter $sql_adapter) ..
@param QuestionList MySQLAdapter$sql_adapter是一个无意义的类型提示。它试图告诉IDE MySQLAdapter属于QuestionList类型,并解释为$sql\u adapter。这显然毫无意义。注释必须是:

@param MySQLAdapter $sql_adapter
更好的方法是使用PHP的类型提示:

public function __construct(MySQLAdapter $sql_adapter) ..

是的,您可以使用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->sql的任何用法都识别为MySQLAdapter类型


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

是的,您可以使用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->sql的任何用法都识别为MySQLAdapter类型

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

检查@param的PHPDoc语法-错误*@param MySQLAdapter$sql_adapter,如果$sql_adapter必须为MySQLAdapter类型,则在构造函数定义中键入提示检查@param的PHPDoc语法-错误*@param MySQLAdapter$sql_adapter,如果必须为$sql_adapter类型类型为MySQLAdapter,然后在构造函数定义中类型提示它您确实需要$param answer和@var answer两者。@param将使autocomplete适用于$sql\u适配器方法范围变量,但不适用于$this->sql。@var将使自动完成在$this->sql中工作。您确实需要$param答案和@var答案。@param将使autocomplete适用于$sql\u适配器方法范围变量,但不适用于$this->sql。@var将使自动完成在$this->sql中工作。您确实需要$param答案和@var答案。@param将使autocomplete适用于$sql\u适配器方法范围变量,但不适用于$this->sql。@var将使自动完成在$this->sql中工作。您确实需要$param答案和@var答案。@param将使autocomplete适用于$sql\u适配器方法范围变量,但不适用于$this->sql。@var将使自动完成在$this->sql中工作。