У меня возникают проблемы с получением подсказок типа 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;
}
}
Задача ещё не решена.
Других решений пока нет …