はじめに
Laravelのクラスやフレームワーク内部のコードを見ていると、こんなメソッドを見かけることがあります。
protected function formatDate($time)
{
return Carbon::parse($time)->format('Y年n月j日 H時i分');
}
このようなメソッドに対して「オーバーライドする」といった表現をよく使いますが、そもそもオーバーライド」とは何か?
本記事では、PHPのオブジェクト指向におけるオーバーライドの概念と、protected の意味について整理します。
①オーバーライド(override)とは?
親クラスで定義されたメソッドを、子クラスで再定義(上書き)すること。
class BaseClass {
protected function formatDate($time) {
return $time;
}
}
class ChildClass extends BaseClass {
protected function formatDate($time) {
return Carbon::parse($time)->format('Y年n月j日 H時i分');
}
}
このように、同じ名前・同じ引数のメソッドを子クラスで再定義することを「オーバーライド」と呼びます。
なぜオーバーライドするのか?
- 処理の一部だけを自分用にカスタマイズしたい
- Laravelのようなフレームワークで、既存の挙動を少しだけ変更したい
- 再利用性と柔軟性を両立したい
②protected の意味
protectedは、PHPのアクセス修飾子の一つです。
したがって、protected function formatDate() は、外部からは呼び出せないけれど、継承先では自由に上書き(オーバーライド)できるメソッド、ということになります。
③Carbonを使ったカスタム日付フォーマットの実装例
use Carbon\Carbon;
class BaseClass {
protected function formatDate($time) {
return $time;
}
}
class MyClass extends BaseClass {
protected function formatDate($time) {
return Carbon::parse($time)->format('Y年n月j日 H時i分');
}
public function showDate($rawDate) {
return $this->formatDate($rawDate);
}
}
$instance = new MyClass();
echo $instance->showDate('2025-04-09 13:45:00');
// => 2025年4月9日 13時45分
④オーバーライドのポイントまとめ
⑤オーバーライドのポイントまとめ
⑥おまけ:Laravelでのオーバーライドの実例
たとえば、FormRequest クラスで failedValidation() メソッドをオーバーライドして、バリデーションエラー時のレスポンスをカスタマイズすることができます。
protected function failedValidation(Validator $validator)
{
throw new HttpResponseException(response()->json([
'errors' => $validator->errors()
], 422));
}
⑦まとめ
- protected function formatDate() のようなメソッドは、クラス内部 or 継承先で使うための上書き可能な処理として定義されています。
- オーバーライドは、フレームワークの挙動を一部変更したいときに非常に便利。
- Laravelの深い理解にもつながるので、ぜひ使いながら慣れていきましょう!