在迭代数组之前,当我使用is_array()测试数组时,我无法获取处理对象数组的Phpstorm类型提示。
有人可以解释为什么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;
}
}