Тип PHPStorm хинтинг массив разных типов

Возможно ли в PHPStorm ввести подсказку для массива с различными типами объектов, т.е.

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

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

4

Решение

Вы можете использовать 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());
}

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

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

3

Другие решения

Это описано в стандартах PHPDoc

https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc.md#713-param

/**
* Initializes this class with the given options.
*
* @param array $options {
*     @var bool   $required Whether this element is required
*     @var string $label    The display name for this element
* }
*/
public function __construct(array $options = array())
{
<...>
}
1

По вопросам рекламы [email protected]