【发布时间】: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->app->make()、app()——我已经为log服务测试过的那些——带和不带附加参数(PhpStorm 2017.2.4) -
注意:Laravel 中的函数声明使用可选参数(默认值)而不是可变参数
...$param——也许这就是区别所在。 -
@LazyOne 您正在使用未完全损坏的 PhpStorm 版本(17.2.4),它适用于设定数量的参数,但不适用于 splat 运算符。在 17.3 或更高版本中,他们删除了对具有多个参数的工厂方法的支持。因此,当我在这里发表第一次评论时,我的理解有些错误,但仍然适用于 splat 运算符。
-
这个更好的地方是youtrack.jetbrains.com/issues 注意:我是PHPSTORM_META的作者和维护者