PHP オーバーライドのサンプル

PHPのオーバーライドのサンプルです。

確認環境
・PHP 7.1.8

目次

オーバーライド

  • 親クラスで定義したメソッドを、子クラスで同じメソッド名を記述して処理内容を上書きすることです。
  • クラスを継承したときに使用できます。

コード

オーバーライドのサンプルです。

<?php
class Color1
{
	public function getName1(){
		return "赤";
	}
}
class Color2 extends Color1
{
	public function getName1(){
		return "青";
	}
}
$cr2 = new Color2();
print $cr2->getName1(); //青
?>

2~7行目は親クラスです。
8~13行目は子クラスです。
4行目と10行目は、親クラスと子クラスに同じメソッド名「getName1」があります。
→オーバーライドです。
15行目は親クラスと子クラスの両方にある「getName1」メソッドを実行しています。実行結果は子クラスのメソッドが実行されます。

 

子クラスから親クラスのインスタンスを参照する(parent::)

子クラスから親クラスのインスタンスを参照するサンプルです。
parent::を使用してオーバーライドした子クラスのメソッドから親クラスのメソッドを呼びます。

<?php
class Color1
{
	public function getName1(){
		return "赤";
	}
}
class Color2 extends Color1
{
	public function getName1(){
		print parent::getName1();
		return "青";
	}
}
$cr2 = new Color2();
print $cr2->getName1(); //赤 青
?>

10行目は、4行目のメソッドをオーバーライドしています。
11行目は、parent::を使用して親クラスのメソッドを呼んでいます。
16行目は、親クラスと子クラスのメソッドの実行結果が表示されます。

 

オーバーライドの禁止(final)

メソッドの前にfinalをつけるとオーバーライドが禁止されます。

<?php
class Color1
{
	final public function getName1(){
		return "赤";
	}
}
class Color2 extends Color1
{
	//public function getName1(){
	//	return "青";
	//}
}
$cr2 = new Color2();
print $cr2->getName1(); //
?>

10行目は、4行目のメソッドをオーバーライドしようとしていますが、4行目のメソッドの前にfinalがついているので不可です。エラーになります。

関連の記事

PHP クラスのサンプル
PHP コンストラクタのサンプル
PHP クラスの継承のサンプル

△上に戻る