PHP

[PHP] オーバーライドとは。

24歳、初心者です。

PHPの基礎から勉強しているのですが、タイトルのような横文字が登場してきました。プログラミングって出てくる単語が横文字ばっかりで、高校時代に読んでいたライトノベルを彷彿とさせてくれるので結構楽しいです(個人的な感想)。その中でも「オーバーライド」って響きは久々に魂にキた・・・ので備忘録代わりに書いておこうと思います。

オーバーライドとは・・・

親クラスで定義されているメソッドを子クラスで同じ名前のメソッドを作って定義し直す(再定義)することです。
例えば

// 親クラス

class Goku {
  public function skill($name, $damage){
    print "名前 = {$name} : ダメージ = {$damage}". '<br>'; 
  }
}

// 子クラス 

class Gohan extends Goku {
  public function skill($name, $damage){
    print "悟飯の必殺技!名前は、{$name}!なんと{$damage}ダメージも敵に与える事ができるんだ!"; 
  }
}

子クラスのskill()メソッドをオーバーライドすることにしました。親クラスでは簡潔な情報のみを表示する冷めたメソッドから,子クラスではコロコロコミックの説明文みたいな情報を表示する熱いメソッドに定義し直すことにしました。

ではメソッドを実行します。

$dragonball = new Goku();
$dragonball->skill('かめはめ波', '500');
$dragonballZ = new Gohan();
$dragonballZ->skill('かめはめ波', '500');

すると結果、

名前 = かめはめ波 : ダメージ = 500
悟飯の必殺技!名前は、かめはめ波!なんと500ダメージも敵に与える事ができるんだ!

となります。最初の一行目が親クラスのskill()、その下が子クラスのskill()となっております。オーバーライドされていますね。

オーバーライドの利点ですが、色々な子クラスを作ってオーバーライドしたメソッドを用意しておけば、様々な状況に対応できるみたいです。

しかしオーバーライドをしてしまうと、同じ名前のメソッドが複数存在することになってしまいます。なんか紛らわしいし、目当てのメソッドを呼び出しそうとしたら違うメソッドを呼び出してしまうかもしれないとか思ってしまわれるかもしれません。しかし心配ご無用。特に変わった処理は必要ありません。上記のように普通にクラスのインスタンスを生成してメソッドを結びつけて呼びだすだけでいいそうです。

参考文献
PHPサーバーサイドプログラミングパーフェクトマスター 
著者 金城 俊哉