使用is_array测试后,PhpStorm类型提示对象数组失败

时间:2015-01-14 04:04:19

标签: php autocomplete phpstorm type-hinting

在迭代数组之前,当我使用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;
    }
}

0 个答案:

没有答案