Настройка IDE под велосипеды

qwerty42

Новичок
Сабж. Есть несколько проектов на разных самописных cms, использующих неочевидные для ide способы хранения разных объектов(в т.ч. инстансов классов). Ни в phpstorm, ни в netbeans я не нашел способа сообщить ide, что, например, результат выполнения
PHP:
$this->fw->get('Routing');
можно использовать как экземпляр класса \FW\Kernel\Routing. Существуют ли способы решения этой проблемы? После долгой работы с C# в удобнейшем Visual Studio такое вот программирование "вслепую", без подсказок, очень напрягает.
 
/* @var $routing \FW\Kernel\Routing */
$routing = $this->fw->get('Routing');

либо для метода get прописать варианты ответов, но будет много мусора.
/**
* @return \FW\Kernel\RoutingInterface| \FW\Kernel\RequestInterface
*/
public function get($name)
 
А как быть с разными экзотическими костылями(или фичами для более компактной записи кода, тут как посмотреть) вроде
PHP:
$this('varname')
, который обрабатывает __invoke?
 
либо для метода get прописать варианты ответов, но будет много мусора.
/**
* @return \FW\Kernel\RoutingInterface| \FW\Kernel\RequestInterface
*/
public function get($name)

Ну этот мусор будет скрыт в "кишках" системы, так что особого дискомфорта при разработке не доставит. А как ide будет определять, что именно вернулось в ответе, если в комментарии будет 20-30 классов? Проверка вроде instanceof для каждого из них?
 
Никак не будет определять, просто тупо давать хинты по всем перечисленным классам.
Так что phpdoc для конкретной переменной более верно. Если она часто используется в разных методах - то вынос в свойство класса и определение типа для этого свойства.
 
А вам не кажется, что если у вас метод может вернуть один из 20-30 экземпляторов разных классов, то в архитектуре есть проблема?
Если метод возвращает одного из потомков для предка - делайте документацию для предка.
 
phpdoc для конкретной переменной более верно
Не везде результат вызова кладется в переменную, кое-где он используется сразу, например
PHP:
$var = $this->getKernel('config')->load('...');
Я думал, что в популярных php ide есть конфиги, описывающие такие ситуации, ведь почти все фреймворки используют подобный синтаксис, тот же CI или Symfony.
 
А вам не кажется, что если у вас метод может вернуть один из 20-30 экземпляторов разных классов, то в архитектуре есть проблема?
Если метод возвращает одного из потомков для предка - делайте документацию для предка.

Пример из официальной документации symfony:
PHP:
$templating = $this->get('templating');
$content = $templating->render(
    'AcmeHelloBundle:Hello:index.html.twig',
    array('name' => $name)
);
Интересно, сколько экземпляров разных классов может вернуть get?
Алсо, проблема в архитектуре не приложения, а языка. Без статического конструтора приходится либо синглтонами извращаться, либо вот такие коллекции котов в мешке городить.
 
Переделайте на магию и магические методы в шапке класса опишите.
 
Переделайте на магию и магические методы в шапке класса опишите.
Если в @return перечислить через | типы возвращаемых значений, то методы всех перечисленных классов в кучу смешаны в подсказках, не намного удобнее получается. Или вы имеете ввиду что-то другое?
 
PHP:
<?php
/**
 * @property CDbAuthManager $authManager The authorization manager component.
 * @property Wysiwyg $wysiwyg
 * @property ESettings $settings
 * @property EImageComponent $eImage
 * @property Bootstrap $bootstrap
 * @property MultiSiteComponent $multisite
 * @property MailSender $mSender
 * @property YandexMap $yaMap
 */
class CWebApplication{}

Yii::app()->wysiwyg->
 
PHP:
<?php
/**
 * @property CDbAuthManager $authManager The authorization manager component.
 * @property Wysiwyg $wysiwyg
 * @property ESettings $settings
 * @property EImageComponent $eImage
 * @property Bootstrap $bootstrap
 * @property MultiSiteComponent $multisite
 * @property MailSender $mSender
 * @property YandexMap $yaMap
 */
class CWebApplication{}

Yii::app()->wysiwyg->
Вот, это оно. А если экземпляры возвращает__invoke, а не __get, можно как-нибудь наподобие описать? В одном проекте используются вызовы вроде $this('obj')->funct(...
 
Хотя, по логике, с __invoke оно и не должно работать, ide-то не знает, что я передаю в качестве аргумента, а от аргумента как раз и зависит тип возвращаемого значения.
 
Сверху