class Foo
{
public function bar(): \stdClass
{
$obj = new \stdClass;
$obj->test = 'test';
return $obj;
}
}
进行$foo = new Foo;
时是否可以注释Phpdoc,以便IDE可以自动完成到$foo->bar()->test
?
答案 0 :(得分:2)
很抱歉,当前无法用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)。