是否可以覆盖全局函数的phpdoc返回类型?

时间:2017-10-06 09:25:26

标签: php laravel phpdoc

我想覆盖全局response function的返回类型,因为我创建了一个覆盖返回的响应类的包。服务提供者正在扩展响应类,而不是默认的7 Tambacounda Market N1 20/09/2017 28,63 Red onion 。这一切都正常工作,并且在通过Laravel IDE helper生成IDE文件时也能识别。

我的问题是只有所述函数的第一次调用才会列出扩展类方法。否则,它会列出phpdocs引用的\Illuminate\Http\Response接口的方法,这是我想要覆盖的接口。我的界面什么也没做,只是将返回类型更改为我的包的响应类:

\Illuminate\Contracts\Routing\ResponseFactory

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

实现此目标的唯一方法是创建一个自定义app/helpers.php文件,并在其中覆盖整个Laravel response函数以及所需的@return类型。如果您通过Composer使用自动加载,则添加

"autoload": {
    "files": ["app/helpers.php"]
}

工作,因为首先会加载Laravels辅助函数。 您必须在index.php之前autoload.php手动要求提供该文件:

require __DIR__ .'/../app/helpers.php';
require __DIR__.'/../vendor/autoload.php';

但请注意,如果不调整phpunit.xml以包含自定义引导文件,这将破坏您的单元测试!

或者,有一个处理优先级问题的作曲家插件(未经测试):https://github.com/funkjedi/composer-include-files

一般情况下,我认为仅仅为了符合IDE而这样做太过于hacky&根本不是一个优势。