2016-01-31 4 views
0

У меня есть метод, как это:PhpStorm генерировать PHPDoc

public function connect (Application $app) 
    { 

    $controller = $app['controllers_factory']; 

    $controller->get('/login', function() { 
     return 'test'; 
    }); 

    return $controller; 
    } 

Все работает отлично, но я хотел бы, чтобы сэкономить $ приложение в частной области, как этот

private $app; 

    public function connect (Application $app) 
    { 

    $this->app = $app; 

    $controller = $this->app['controllers_factory']; 

    $controller->get('/login', function() { 
     return 'test'; 
    }); 

    return $controller; 
    } 

В этом случае PHPStrom бросает ошибку «метод не найден в классе». Я попробовал phpdoc, но это не сработало (как вы видите, я использую микроструктуру SILEX)

+1

Возможно, используйте конструктор, установите переменную $ app (private), и весь класс имеет к ней доступ. И что с ним делает PHPdoc? – Kyslik

+0

С конструктором все работает отлично (теперь метод найден), но Silex не позволяет мне использовать конструктор. – Mati

+1

Я не уверен, что вы пытаетесь выполнить, пожалуйста, отредактируйте вопрос и добавьте весь код этого файла. Или попробуйте вызвать родительский конструктор в вашем конструкторе. – Kyslik

ответ

0

Автозаполнение застряло на этом шаге, потому что неясно, какое значение принимает массив (даже если это объект, который действует как массив).

$controller = $this->app['controllers_factory']; 

Существует две возможности. Во-первых, если у вас есть массив, которые состоят из элементов, которые разделяют один тип, вы можете указать тип, как это:

/** 
* @var Application[] 
*/ 
private $app; 

Альтернативный метод заключается в определении типа переменной инлайн:

/** @var Application $controller */ 
$controller = $this->app['controllers_factory']; 

Оба варианта поддерживаются PHPStorm.

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