我想覆盖全局response function的返回类型,因为我创建了一个覆盖返回的响应类的包。服务提供商正在扩展将返回的响应类,而不是默认的\Illuminate\Http\Response
。这是所有工作,并通过Laravel IDE helper生成IDE文件时也承认。是否可以重写全局函数的phpdoc返回类型?
我的问题是只有第一次调用所述函数列出了扩展类的方法。否则,它会列出引用\Illuminate\Contracts\Routing\ResponseFactory
接口的phpdocs中的方法,这是我想要覆盖的接口。我的界面只是将返回类型更改为我的包的响应类别:
<?php
namespace My\Package;
use Illuminate\Contracts\Routing\ResponseFactory as BaseResponseFactory;
interface ResponseFactory extends BaseResponseFactory
{
/**
* Return a new response from the application.
*
* @param string $content
* @param int $status
* @param array $headers
*
* @return \My\Package\Response
*/
public function make($content = '', $status = 200, array $headers = []);
/**
* Return a new view response from the application.
*
* @param string $view
* @param array $data
* @param int $status
* @param array $headers
*
* @return \My\Package\Response
*/
public function view($view, $data = [], $status = 200, array $headers = []);
}
我该如何实现这一目标?
你为什么要这么做?您的自定义响应类可以始终扩展Illuminate \ Http \ Response或底层Symfony \ Component \ HttpFoundation \ Response。但接口的一点是,它与其他引用相同接口的代码提供了固定的契约。所以,我认为重写方法并不是一个好主意。 – macghriogair
至于你想要覆盖全局响应帮助函数的问题的一部分:这在全局名称空间中不应该是可能的,因为自动加载器会在你自己的函数之前加载Laravels帮助函数。但是你可以通过在自己的命名空间中重新定义它来帮助自己,参见回答“命名空间php> = 5.3的猴子补丁”在这里https://stackoverflow.com/questions/3620659/is-it-possible-to-overwrite-a-function-in-php – macghriogair
我想实现的只是简单通过'response()'方法进行类型提示,该方法指向Laravel Contract,它在phpdoc中声明'Illuminate \ Http \ Response'作为返回类型,而不是'\ My \ Package \ Response'。 – Krenor