Я пишу некоторый объектно-ориентированный код 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();
}
@param QuestionList MySQLAdapter $sql_adapter
это бессмысленная подсказка Он пытается сказать IDE, что MySQLAdapter
имеет тип QuestionList
с объяснением $sql_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.