2015-03-20 3 views
2

Можно ли в PhpStorm ввести намекают массив с различными типами объектов, а именно:PhpStorm Тип намекая массив различных типов

public function getThings() 
{ 
    return array (new Thing(), new OtherThing(), new SomethingElse()); 
} 

Даже объявляя их по отдельности, прежде чем строить массив, кажется, не работает.

+0

Да. «PHP 5 вводит намеки типов. Теперь функции теперь могут принудительно настраивать параметры (указывая имя класса в прототипе функции), интерфейсы, ** массивы (начиная с PHP 5.1) **« http: // php. net/manual/en/language.oop5.typehinting.php - Если я полностью не понял ваш вопрос. –

+1

Я говорю о PHPStorm (IDE) @ ʰᵈˑ –

+0

А, ну, [это редактирование] (http://stackoverflow.com/revisions/29165580/2) разрешило мое замешательство в вопросе. Виноват. –

ответ

3

вы можете использовать phpdocs для того, чтобы PhpStorm принять массив нескольких типов, как так:

/** 
* @return Thing[] | OtherThing[] | SomethingElse[] 
* 
*/ 
public function getThings() 
{ 
    return array (new Thing(), new OtherThing(), new SomethingElse()); 
} 

Эта техника заставит PhpStorm думать, что массив может содержать любой из этих объектов и так это даст вам тип намека для всех трех. В качестве альтернативы вы можете сделать все объекты распространяются на другой объект или реализовать интерфейс и тип подсказки, что когда-то объект или интерфейс, как так:

/** 
* @return ExtensionClass[] 
* 
*/ 
public function getThings() 
{ 
    return array (new Thing(), new OtherThing(), new SomethingElse()); 
} 

Это даст вам тип подсказки только для того, что классы расширить или реализовать от родительский класс или интерфейс.

Я надеюсь, что это помогло!

+1

Вы можете написать '@return (Thing | OtherThing | SomethingElse) []'. Вместо того, чтобы говорить, что существует 3 возможных типа возврата, вы говорите, что единственным возвращаемым типом является массив, но значения массива могут быть разных типов. Это тонкая разница. – beardedlinuxgeek

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