返される応答クラスをオーバーライドするパッケージを作成したので、グローバルresponse functionの戻り値の型をオーバーライドします。サービスプロバイダは、デフォルトの\Illuminate\Http\Response
の代わりに返される応答クラスを拡張しています。これはすべて動作しており、Laravel IDE helperでIDEファイルを生成するときにも認識されます。グローバル関数の戻り値の型をオーバーライドすることはできますか?
私の問題は、上記関数のの最初の呼び出しであるが、拡張するクラスメソッドをリストしているということです。さもなければ、私はオーバーライドしたいと思うものである\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ヘルパ関数をロードするため、グローバル名前空間では使用できません。しかし、あなた自身の名前空間でそれを再定義することによって、自分自身を助けることができます。 Answer "Monkey patch in namespace php> = 5.3"ここhttps://stackoverflow.com/questions/3620659/is-it-possible-to-overwrite-a-function-in-php – macghriogair
私が達成したいのは、単純に'\ My \ Package \ Response'ではなく' \ Illuminate \ Http \ Response'を戻り値の型としてphpdocに書いているLaravel Contractを指し示す 'response()'メソッドで型ヒントを持っています。 – Krenor