【问题标题】:PhpStorm meta and multiple factory argumentsPhpStorm 元和多个工厂参数
【发布时间】:2017-12-05 04:30:19
【问题描述】:

我一直在尝试为工厂方法设置 .phpstorm.meta.php 文件,但我无法让它完全工作。它适用于只需要 1 个参数的工厂方法,但如果有 2 个或更多参数,则不起作用。

所以基本上,所有接受超过 1 个参数的工厂方法都会受到影响,尤其是 splat 参数,即factory(string $className, ...$ctorArgs)

这是我的元文件的示例;

<?php
namespace PHPSTORM_META {
    override(
        \ContainerInterface::make(0),
        map([
            '' => '@',
        ])
    );
}

这是签名;

<?php
interface ContainerInterface{
    /* @return mixed */
    public function make (string $className, ...$ctorArgs);
}

这是预期/结果的示例;

<?php
$container->make(MyClass::class, "hello", "world")-> // Nothing is indicated here, should indicate MyClass props/methods

我在这里做错了吗?

【问题讨论】:

  • 显然从 17.2 开始,他们决定将工厂方法限制为只有一个参数。在以前的版本中,使用旧语法,这不受限制。 youtrack.jetbrains.com/issue/WI-38403
  • 您能创建并分享一个包含最少需要的类的简单项目吗?这对 Laravel 来说是可行的:\App::make()$this-&gt;app-&gt;make()app()——我已经为 log 服务测试过的那些——带和不带附加参数(PhpStorm 2017.2.4)
  • 注意:Laravel 中的函数声明使用可选参数(默认值)而不是可变参数...$param——也许这就是区别所在。
  • @LazyOne 您正在使用未完全损坏的 PhpStorm 版本(17.2.4),它适用于设定数量的参数,但不适用于 splat 运算符。在 17.3 或更高版本中,他们删除了对具有多个参数的工厂方法的支持。因此,当我在这里发表第一次评论时,我的理解有些错误,但仍然适用于 splat 运算符。
  • 这个更好的地方是youtrack.jetbrains.com/issues 注意:我是PHPSTORM_META的作者和维护者

标签: php phpstorm


【解决方案1】:

这显然是一个已知的错误; https://youtrack.jetbrains.com/issue/WI-38403

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多