注释在 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)。