PhpStorm не распознает методы моего объекта

Я пишу некоторый объектно-ориентированный код PHP в PhpStorm, и я столкнулся с проблемой.

Я вижу, что вам нужно определить эти комментарии PHPDoc, и я пытаюсь сделать то же самое. QuestionList мой «активный» класс, MySQLAdapter мой другой класс, который обрабатывает базу данных и запросы SQL.

Я пытаюсь определить конструкторы $sql_adapter параметр как MySQLAdapter так что когда я ударил Ctrl + Пробел Я могу видеть доступные функции моего объекта, но без какой-либо удачи.

Первый раз, когда я использую мой 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();
}

1

Решение

@param QuestionList MySQLAdapter $sql_adapter это бессмысленная подсказка Он пытается сказать IDE, что MySQLAdapter имеет тип QuestionList с объяснением $sql_adapter, Это, очевидно, не имеет смысла. Аннотация должна быть:

@param MySQLAdapter $sql_adapter

Еще лучше использовать подсказку типа PHP:

public function __construct(MySQLAdapter $sql_adapter) ..
4

Другие решения

Да, вы можете использовать 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.

3

По вопросам рекламы [email protected]