【问题标题】:PHPDoc dynamic namespace with inheritance具有继承性的 PHPDoc 动态命名空间
【发布时间】:2014-07-29 18:35:30
【问题描述】:

我有一些伪代码

<?php
namespace Parent {

    class Helper{
        public $a;
    }

    class Test{
        /**
        * @var Helper
        */
        public $helper;

        public function __construct() {
            $reflection = new \ReflectionClass($this);
            $name = $reflection->getNamespaceName() . "\Helper";
            $this->helper = new $name;
        }
    }

}

namespace Child {

    class Helper{
        public $b;
    }

    class Test extends \Parent\Test {}
}

在这个 PHPDoc 属性中,\Child\Test->helper 有指向 \Parent\Helper 的链接。

对于 PHPStorm 和 phpDocumentor,@var Helper 等于 @var \Parent\Helper。当尝试在\Child\Test 中获取$this-&gt;helper 的自动完成功能时,我只能从\Parent\Helper 获取方法

我应该如何重写我的 phpdoc 块?

【问题讨论】:

    标签: php phpdoc


    【解决方案1】:

    覆盖子类中的属性以将完全限定的命名空间放在那里:

    class Test extends \Parent\Test
    {
        /**
         * @var \Child\Helper
         */
        protected $helper;
    

    请注意,该属性需要在父级中受到保护(或公开)。

    另一种选择是使用 Helper 的接口,然后更改属性上的 DocBlock 以表示接口,例如

    @var HelperInterface
    

    这是假设您的 Helpers 共享相同的 API。

    另见docs for PHPDocumentor explaning how to annotate types.

    【讨论】:

    • 对于 PHPStorm 和 phpDocumentor @var Helper 等于 @var \Parent\Helper。当尝试在\Child\Test 内获取$this-&gt;helper 的自动完成功能时,我只能从\Parent\Helper 获取方法
    • @Hello 然后覆盖子类中的属性
    猜你喜欢
    • 2014-12-28
    • 2013-03-10
    • 1970-01-01
    • 2018-02-09
    • 2013-08-13
    • 2017-12-10
    • 2015-07-18
    • 2011-05-29
    相关资源
    最近更新 更多