我想覆蓋全局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