【问题标题】:specify @return type in phpdoc based on input parameter value根据输入参数值在phpdoc中指定@return类型
【发布时间】:2014-08-14 21:51:56
【问题描述】:

有人知道根据输入参数指定@return 类型的方法吗?

我的项目有很多方法调用比如

...->getComponent('name')->someMethod()

其中getComponent 是一个服务定位器,IDE 不理解它返回的值。

【问题讨论】:

  • 据我所知(可能因 IDE 而异)。您有多少服务,它们的动态性如何?只是定义getComponentWhateverName() 不是一个选项吗?

标签: php phpdoc


【解决方案1】:

唯一的方法是让getComponent()@return 标签实际上列出所有可能返回的数据类型。 PHP 允许的这种动态、松散的类型行为不利于 IDE 自动完成所完成的静态解析。尝试记录一直是一个棘手的案例,因为您的 API 文档与 IDE 必须构建以提供自动完成功能的“对象树”一样“静态”。

如果 IDE 自动完成足够紧急,需要调整代码来实现它,那么除了我之前的

@return ClassOne|ClassTwo|...|ClassInfinitum 选项,

您可以拆分这两个调用而不是链接它们,并使用 一些 IDE 知道如何识别的@var“本地文档块”:

// this litte docblock establishes the data type for the local variable $nameComponent // note however that some IDEs want "datatype varname", // some want "varname datatype", // and some don't recognize the docblock at all /** @var \NameClass $myComponent */ $nameComponent = $service->getComponent('name'); // here, the known methods of NameClass should pop up after typing -> $nameComponent->

【讨论】:

    【解决方案2】:

    对于PhpStorm IDE,您可以在项目中创建一个或多个名为.phpstorm.meta.php 的文件。以下是此类文件的示例内容:

    <?php
    
    namespace PHPSTORM_META {
    
        override(\Factory::getComponent(), map([
            "name" => \some\namespace\Name::class,
            "exception" => \Exception::class,
        ]));
    
    }
    

    您可以在此处找到文档: https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html#map

    我建议提交此文件,以便其他 PhpStorm 用户可以使用自动完成功能。

    【讨论】:

      猜你喜欢
      • 2018-08-16
      • 2015-07-22
      • 1970-01-01
      • 2014-08-14
      • 2017-02-06
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多