Возможно ли в PHPStorm ввести подсказку для массива с различными типами объектов, т.е.
public function getThings()
{
return array (new Thing(), new OtherThing(), new SomethingElse());
}
Даже объявление их отдельно перед созданием массива, похоже, не работает.
Вы можете использовать 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());
}
Это даст вам подсказки типа только для того, что классы расширяют или реализуют из родительского класса или интерфейса.
Я надеюсь, что это помогло!
Это описано в стандартах 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())
{
<...>
}