Сбой хинтинга массива объектов типа PhpStorm после тестирования с помощью is_array

У меня возникают проблемы с получением подсказок типа Phpstorm, работающих с массивами объектов, когда я проверяю массив с помощью is_array () перед итерацией по массиву.

Может кто-нибудь пролить свет на то, почему is_array () удаляет намеки на типы объектов?

$test = new Test();
$testers = $test->getAll();

// Type hinting WORKS for $test
foreach($testers as $test) {
$test->getId(); // Type hinting works
}

// Type hinting does NOT work for $test
if(is_array($testers)) {
foreach($testers as $test) {
$test->getId(); // Type hinting does NOT work
}
}

Я могу заставить работать подсказки типа, если я добавлю комментарий подсказки типа, где извлекается массив, но это нежелательно, так как я бы предпочел, чтобы Phpstorm использовал метод подсказки типа возвращаемого объекта, вместо того, чтобы указывать его постоянно:

Добавление этого работает, даже когда is_array присутствует
/ ** @var Tester [] $ testers * /
$ testers = $ test-> getAll ();

Проверьте код класса на случай, если кто-то захочет запустить пример:

class Tester {
private $id;
private $name;

public function __construct($id, $name) {
$this->id = $id;
$this->name = $name;
}

/**
* @return Integer
*/
public function getId() {
return $this->id;
}

/**
* @return String
*/
public function getName() {
return $this->name;
}

}

class Test {
/**
* @return tester[]
*/
public function getAll() {
$testers = array(
new Tester(1, 'Bob'),
new Tester(2, 'Jane'),
new Tester(3, 'Tim')
);
return $testers;
}
}

0

Решение

Задача ещё не решена.

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

Других решений пока нет …

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