在stdClass中创建的Annonate字段?

时间:2019-01-26 19:47:41

标签: php netbeans ide phpdoc

class Foo
{
    public function bar(): \stdClass
    {
        $obj = new \stdClass;
        $obj->test = 'test';
        return $obj;
    }
}

进行$foo = new Foo;时是否可以注释Phpdoc,以便IDE可以自动完成到$foo->bar()->test

1 个答案:

答案 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)。