Подсказка типа PHP при итерации в объект

это мой первый пост в stackoverflow!

Я разрабатываю PHP-фреймворк, и мне нужно предоставить подсказку типа для объектов.

Я собираюсь перечислить пример структуры, которую я использую:

  • класс Database, используемый как "точка входа". Этот класс подключается к базе данных с помощью PDO и имеет свойство UserSet.

  • класс UserSet, расширяющий класс Set (предназначенный как набор пользователей)

  • класс Set с методами, подобными SQL
  • класс User, только с реквизитами таблицы

Пример

Set имеет метод select, который возвращает массив пользователей через PDO;

$prepare = $this->database->prepare($this->sql);
$prepare->execute();
$prepare->setFetchMode(PDO::FETCH_CLASS,  $this->TABLE);
return $prepare->fetchAll();

UserSet переопределяет выбор с помощью оператора @method следующим образом:

/** @method User|UserSet select() blablabla */

Таким образом, я получаю подсказку типа при назначении select переменной

$result = $database->UserSet->select()

но $result имеет тип User и UserSet, и у меня есть во всплывающем окне кода завершения (Netbeans) подсказки от User и UserSet, хотя я бы хотел, чтобы он был типа UserSet и имел User подсказки только при повторении. (что-то вроде UserSet ‹ User >, думая как Java)

Можно ли этого достичь?

Простите за длинный пост! Спасибо вам всем!


person Flavio Tulino    schedule 18.12.2014    source источник
comment
Почему ваша функция select() возвращает разные типы? От чего это зависит. Кроме того, то, что вы спрашиваете, больше связано с IDE, в данном случае с Netbeans. Кроме того, почему вы ожидаете увидеть подсказки User при повторении, какова логика? Я почти на 99% уверен, что то, что вы просите, невозможно сделать в Netbeans, но, возможно, есть альтернативное решение вашей проблемы.   -  person ziGi    schedule 18.12.2014


Ответы (1)


Прежде всего, если ваш метод select() всегда возвращает return $prepare->fetchAll();, то ваша подсказка типа возвращаемого значения в комментарии @method User|UserSet select() неверна, потому что PDOStatement::fetchAll() возвращает массив.

Предполагая, что ваш $this->TABLE равен 'User', тогда ваш метод select() возвращает массив из User объектов. Попробуйте намекнуть так: @method User[] select().

person Giedrius D    schedule 18.12.2014
comment
Да, я знаю, PDO::fetchAll возвращает массив. Я пытался создать пользовательскую коллекцию как UserSet, которая в любом случае является массивом пользователя. - person Flavio Tulino; 18.12.2014
comment
Извините, если я неправильно понял ваш вопрос. Из того, что я понял из вопроса, ваш объект UserSet действует не как коллекция, а скорее как DAO (объект доступа к данным). У него есть методы для доступа к данным, такие как select(), которые возвращают массивы (коллекции), но сами по себе не содержат никаких элементов. - person Giedrius D; 18.12.2014
comment
И поскольку вы представили select() попытку подсказки типа метода как проблему, я указал, что с ней не так и как это можно исправить. - person Giedrius D; 18.12.2014