【问题标题】:Annonate fields created in a stdClass?注释在 stdClass 中创建的字段?
【发布时间】:2019-06-20 06:46:45
【问题描述】:
class Foo
{
public function bar(): \stdClass
{
$obj = new \stdClass;
$obj->test = 'test';
return $obj;
}
}
在做$foo = new Foo;时,是否可以注解Phpdoc,以便IDE可以自动补全到$foo->bar()->test?
【问题讨论】:
标签:
php
netbeans
ide
phpdoc
【解决方案1】:
抱歉,目前无法在 phpDocumentor 或 NetBeans 理解的自定义注释格式中记录关联数组或 stdClass 对象。
从设计的角度来看,使用适当的类也许是有意义的:
class Bar
{
/**
* @var string
*/
public $test;
}
class Foo
{
public function bar(): Bar
{
$obj = new Bar;
$obj->test = 'test';
return $obj;
}
}
如果你根本不需要逻辑,类可以是空的:
/**
* @property string $test
*/
class Bar
{
}
否则,您总是可以使用定义假类但从未实际执行的存根文件来欺骗 IDE,然后假装您的变量属于该类:
$foo = new Foo;
/* @var $bar Bar *//** @var Bar $bar */
$bar = $foo->bar();
$bar->…
.../* @var $bar Bar */ 用于 NetBeans 8 及更早版本,/** @var Bar $bar */ 用于 NetBeans 10(和许多其他 IDE)。