0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP/Laravelでよく出てくる「オーバーライド」とは?protectedメソッドの意味も含めて解説

Posted at

はじめに

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のアクセス修飾子の一つです。

IMG_7770.jpeg

したがって、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分

④オーバーライドのポイントまとめ

IMG_7771.jpeg

⑤オーバーライドのポイントまとめ

IMG_7772.jpeg

⑥おまけ:Laravelでのオーバーライドの実例

たとえば、FormRequest クラスで failedValidation() メソッドをオーバーライドして、バリデーションエラー時のレスポンスをカスタマイズすることができます。

protected function failedValidation(Validator $validator)
{
    throw new HttpResponseException(response()->json([
        'errors' => $validator->errors()
    ], 422));
}

⑦まとめ

  • protected function formatDate() のようなメソッドは、クラス内部 or 継承先で使うための上書き可能な処理として定義されています。
  • オーバーライドは、フレームワークの挙動を一部変更したいときに非常に便利。
  • Laravelの深い理解にもつながるので、ぜひ使いながら慣れていきましょう!
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?