【问题标题】: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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2017-06-14
      相关资源
      最近更新 更多