因此,在PHPDoc中,可以在成员变量声明上方指定@var,以提示其类型。然后一个IDE,例如PHPEd,将知道它正在处理的对象类型,并能够为该变量提供代码洞察力。
<?php
class Test
{
/** @var SomeObj */
private $someObjInstance;
}
?>
这很好,直到我需要对对象数组做同样的事情,以便在以后迭代这些对象时能够得到适当的提示。
那么,是否有一种方法来声明PHPDoc标签,以指定成员变量是SomeObjs的数组?@var数组是不够的,@var数组(SomeObj)似乎是无效的,例如。
Use:
/* @var $objs Test[] */
foreach ($objs as $obj) {
// Typehinting will occur after typing $obj->
}
在输入内联变量时,和
class A {
/** @var Test[] */
private $items;
}
类属性。
2009年PHPDoc(以及像Zend Studio和Netbeans这样的ide)没有这个选项时的先前答案:
你最多只能说,
foreach ($Objs as $Obj)
{
/* @var $Obj Test */
// You should be able to get hinting after the preceding line if you type $Obj->
}
我在Zend Studio经常这样做。我不知道其他编辑器的情况,但它应该能起作用。
在NetBeans 7.0(可能更低)中,你可以声明返回类型为“数组与文本对象”,就像@return Text和代码提示一样:
编辑:用@Bob Fanger的建议更新了示例
/**
* get all Tests
*
* @return Test|Array $tests
*/
public function getAllTexts(){
return array(new Test(), new Test());
}
使用它:
$tests = $controller->getAllTests();
//$tests-> //codehinting works!
//$tests[0]-> //codehinting works!
foreach($tests as $text){
//$test-> //codehinting works!
}
这并不完美,但总比“混合”要好,因为“混合”没有任何价值。
缺点是你可以将数组作为文本对象,这会抛出错误。