注释在 stdClass 中创建的字段?
Annonate fields created in a stdClass?
class Foo
{
public function bar(): \stdClass
{
$obj = new \stdClass;
$obj->test = 'test';
return $obj;
}
}
在执行 $foo = new Foo;
时,是否可以注释 Phpdoc 以便 IDE 可以自动完成 $foo->bar()->test
?
抱歉,目前无法在 phpDocumentor 或 NetBeans 理解的自定义注释格式中记录关联数组或 stdClass
对象。
从设计的角度来看,使用适当的 classes 可能是有意义的:
class Bar
{
/**
* @var string
*/
public $test;
}
class Foo
{
public function bar(): Bar
{
$obj = new Bar;
$obj->test = 'test';
return $obj;
}
}
如果您根本不需要任何逻辑,classes 可以为空:
/**
* @property string $test
*/
class Bar
{
}
否则,你总是可以用一个定义假 class 但从未真正执行过的存根文件来欺骗 IDE,然后假装你的变量属于那个 class:
$foo = new Foo;
/* @var $bar Bar *//** @var Bar $bar */
$bar = $foo->bar();
$bar->…
… 其中 /* @var $bar Bar */
用于 NetBeans 8 及更早版本,/** @var Bar $bar */
用于 NetBeans 10(以及许多其他 IDEs)。
class Foo
{
public function bar(): \stdClass
{
$obj = new \stdClass;
$obj->test = 'test';
return $obj;
}
}
在执行 $foo = new Foo;
时,是否可以注释 Phpdoc 以便 IDE 可以自动完成 $foo->bar()->test
?
抱歉,目前无法在 phpDocumentor 或 NetBeans 理解的自定义注释格式中记录关联数组或 stdClass
对象。
从设计的角度来看,使用适当的 classes 可能是有意义的:
class Bar
{
/**
* @var string
*/
public $test;
}
class Foo
{
public function bar(): Bar
{
$obj = new Bar;
$obj->test = 'test';
return $obj;
}
}
如果您根本不需要任何逻辑,classes 可以为空:
/**
* @property string $test
*/
class Bar
{
}
否则,你总是可以用一个定义假 class 但从未真正执行过的存根文件来欺骗 IDE,然后假装你的变量属于那个 class:
$foo = new Foo;
/* @var $bar Bar *//** @var Bar $bar */
$bar = $foo->bar();
$bar->…
… 其中 /* @var $bar Bar */
用于 NetBeans 8 及更早版本,/** @var Bar $bar */
用于 NetBeans 10(以及许多其他 IDEs)。