这个问题是与这一个:
是否可以提示返回数组中的项类型?
例如:
/**
* MyFunction does a lot of things
*
* @param TClass1 $var1
* @param TClass2 $var2
* @return array[TClass3] //<- I'm trying to express this
*/
function MyFunction( $var1, $var2 ){
...
Run Code Online (Sandbox Code Playgroud)
我使用NetBeans作为IDE,它(像许多其他PHP IDE一样)利用上面函数的doc bloc来确定返回值的类型.
如果我能解释数组中预期的类型,我希望IDE能够为以下情况提供正确的完成:
$myTab = MyFunction( $foo, $bar );
foreach( $myTab as $itm ){
$itm->myFi| //offer the completion for a TClass3 object
}
Run Code Online (Sandbox Code Playgroud) 是否有类型提示允许PHP 8.3使用ExampleClass[]它来声明它是该类的对象数组ExampleClass?
在我的具体情况下,ExampleClass称为Task
我想要但不起作用:
private Task[] $tasks;
Run Code Online (Sandbox Code Playgroud)
我的 PHPStorm IDE 告诉我,只有在 doc 类型中才允许使用复数类型
——也就是说,只有在PHPDocusing中Tasks[]才完全可以。但我想使用纯 PHP。
错误是:
PHP Parse error: syntax error, unexpected token "[", expecting variable
如果我只需要一个对象Task而不是一组对象,Task[]那么它可以使用:
private Task $task;
Run Code Online (Sandbox Code Playgroud)
这是我当前的工作解决方法:
private array $tasks;
Run Code Online (Sandbox Code Playgroud) 在phpDoc生成的文档中,我可以使phpDoc生成指向给定param的自定义类型定义的链接
@param CustomType $variablename
Run Code Online (Sandbox Code Playgroud)
这很有效.但是,我目前正在记录的代码需要CustomType []参数,即所述CustomType的数组.我希望文档清楚,需要一个数组,但是当我使用时
@param CustomType[] $variablename
Run Code Online (Sandbox Code Playgroud)
phpDoc不再识别类型,因此无法链接到它的定义.在这种情况下,这非常重要 - 我正在记录一个API,它需要提供一些相当复杂的类型.
我为此尝试了几种不同的语法,所有这些语法都将条目视为单独的变量类型或在文档中中断类型识别.
除非我在参数说明中注意到它,但是在类型中显示参数的数组似乎更清楚.
编辑
使用phpDocumentor 2(与DocBlox合并)
@param CustomType[] $paramName
Run Code Online (Sandbox Code Playgroud)
语法有效,并且如@ Styx的回答中所述,PhpStorm支持使用该语法进行类型提示.
接受的答案适当更新.
说我有这样的功能:
function theFunction() {
$arr = array();
for ($i=0;$i<10;$i++) {
$arr[] = new theObject($i);
}
return $arr;
}
Run Code Online (Sandbox Code Playgroud)
我需要记录函数的返回类型.我当然可以使用array,但这并没有提供可以提供的所有信息,也没有告诉开发人员很多关于函数的真实性质.
如何在PHPDoc中记录"[type]"类型的类型?
我认为我的eclipse的ctrl +点击链接可能会受益匪浅......
编辑:我正在使用eclipse PDT.
编辑2:我对使用@return或@var语句在函数(和变量)之前放置docblocks的解决方案非常满意,我刚刚更新了我的应用程序的文档,现在eclipse向我展示了可用的函数什么对象!
真棒.
可能重复:
PHPDoc类型提示对象数组?
我使用PhpDocumentor2生成文档.我搜索了这个主题,但我找不到具体的规则.例如,我有一个名为AddressField的类,我想将$ addressFields指定为AddressField对象的数组.
/**
* @var AddressField[]
*/
private $addressFields;
Run Code Online (Sandbox Code Playgroud) 我试图利用 NetBeans 处理对象类型的智能方式,因此我在注释中暗示了每个对象的类型。
问题是,我想提示一个 (string => ObjectClass) 的关联数组。
我已经尝试了以下所有方法,但没有任何效果:
/**
* @var [string => ObjectClass]
*/
private $myAssociativeArray;
Run Code Online (Sandbox Code Playgroud)
和
/**
* @var string|ObjectClass[]
*/
private $myAssociativeArray;
Run Code Online (Sandbox Code Playgroud)
如何让 NetBeans 知道我正在暗示字符串到 ObjectClass 的映射?
提前致谢。
细节
Foo实现\Iterator接口的类,我们知道迭代器中的所有项都是class的实例Bar.题
如何提示它Foo是可迭代的并且只包含Bar?当然,提示应该保留信息,这是它的实例Foo
到目前为止我尝试了什么
如果我们有一个数组Bar的情况下,那么这是一件容易的事情(它的描述,例如,在这个问题)Bar[].此外,如果意图是迭代Foo,它仍然可以解决(或多或少):
//assume that $foo is instance of Foo
//..
/* @var $object Bar */
foreach ($foo as $object) {
}
Run Code Online (Sandbox Code Playgroud)
但是,有一个非常重要的事情是使用就地提示无法实现的:返回类型.如果我有一些应该返回的方法Foo,我只知道如何提示Foo,但该函数的用户仍然无法公开,它实际上是可迭代的并且包含Bar实例(就像我指定的那样)@return Bar[]如果是Bar实例数组)
我想做这样的事情:
class CCC {}
function abc(array of CCC $variable)
Run Code Online (Sandbox Code Playgroud)
这可能在PHP?
php ×8
phpdoc ×5
type-hinting ×4
arrays ×2
netbeans ×2
return-value ×2
class ×1
custom-type ×1
eclipse ×1
function ×1
php-5.2 ×1
php-8.1 ×1
php-8.2 ×1
types ×1