2016-07-23 3 views
1

Я имею следующую структуру классаПредложенные методы проигравшие в PhpStorm, когда реализуется подкласс

Class Structure

Я использую сервис Symfony2 для управления BaseHandler и BaseManager классы

class BaseHandler implements IHandler 
{ 
    /** 
    * @var IManager 
    */ 
    protected $manager; 

    ... 

    public function setManager(IManager $manager) 
    { 
     $this->manager = $manager; 
    } 
    ... 
} 

Все произведения отлично, но проблема в том, что я пытаюсь использовать некоторые методы класса SpecializedManager, и предложения PhpStorm не показывают их методы, только методы, относящиеся к IManager.

Например, в моем контроллере

public function indexAction(){ 
    $handler = $this->get('appbundle.handler.specialized_handler'); 
    $items = $this->manager->mySubClassMethod(); // PHPStorm shows warning 
    ... 
} 

Я не знаю, как установить в обработчик подкласса аннотацию вар manager, чтобы изменить что-то вроде этого @var SpecializedHandler $manager, ни другой альтернативные пути методов появляются в предложения.

ПРИМЕЧАНИЕ: базовый класс или расширенный для мультипликаторов специализированных подклассов.

+0

Посмотрите на [это] (http://stackoverflow.com/questions/24105260/php-upcasting-object). Вопрос. –

+1

Возможно, вам понадобится использовать промежуточную переменную ('$ manager = $ this-> manager; $ manager-> mySubClassMethod()'), которую вы можете набрать с помощью встроенного '@ var', как вы предложили. Другой подход (лучше, поскольку он опирается только на PHPDoc) заключается в том, чтобы повторно объявить свойство '$ manager' в текущем/родительском классе через' @ property' (должно быть расположено в PHPDoc для этого класса). Все это из-за того, что с помощью PHPDoc (и статического анализа PhpStorm) вы можете вводить только объекты 1-го уровня ('например' $ this', '$ manager' и т. Д.) И не может выполнять n-level (' $ this-> manager' и т. Д.). – LazyOne

+1

Существуют и другие подходы, такие как: ввести 'getManager()' метод в этом/родительском классе, который будет содержать правильный тег '@ return' и использовать его вместо' $ this-> manager' в вашем коде. – LazyOne

ответ

0

Как вы используете PhpStorm, вы можете установить плагин Symfony2 для PhpStorm: https://plugins.jetbrains.com/plugin/7219?pr=phpStorm

С помощью этого плагина установлен (и включен в проект), вы должны автоматически иметь полное завершение авто на услуги.

 Смежные вопросы

  • Нет связанных вопросов^_^