PHPにも他のオブジェクト指向言語と同様にクラス継承が可能です。元になるクラスを親クラスと呼び、継承をすることで親クラスのメソッドなどを子クラスでも利用できるようになります。
継承を利用することは、「差分プログラミング」とも呼ばれていて、コード量を減らすために有効な手段となっています。
extendsを使ったクラス継承の方法
PHPでクラス継承するための書式は下記のようになります。
1 2 3 |
class クラス名 extends 親クラス名 { //コード } |
クラス継承の注意点
修飾子がprivateのメソッド・プロパティは継承されません。そのため、子クラスからアクセスするメソッド・プロパティは、publicまたはprotected修飾子を使う必要があります。protectedをつけると、そのクラスと継承された子クラスでのみアクセス可能となり、外部からはアクセスできません。
また、親クラスのコンストラクタは継承されただけでは実行されないので注意してください。
子クラスから親クラスのメソッド・プロパティにアクセス
子クラスから親クラスのメソッドや静的プロパティを扱うにはparent::を使います。
例えば、子クラスから親クラスの__construct()を実行するのは以下ようなサンプルコードとなります。
サンプルコード
1 2 3 4 5 6 7 |
class ChildClass extends ParentClass { function __construct() { parent::__construct(); } } |
サンプルコード
クラスを2つ定義して、一方からもう一方を継承します。インスタンスを作ったあとで、それぞれのクラスが持つメソッドを呼び出してみましょう。
空のChildClassクラスを作成、ParentClassクラスを継承するというサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class ChildClass extends ParentClass { } class ParentClass { function echoMessage() { echo "This is ParentClass"; } } $child = new ChildClass(); $child->echoMessage(); |
子クラスにechoMessage()という関数はありませんが、ParentClassから継承しているので使うことができます。
実行結果
1 |
This is ParentClass |
クラスの継承はフレームワークを利用するアプリケーションでも見ることができます。フレームワークを継承した上で独自のコードを追加するという手順で、コーディング作業を減らしているというわけです。
同じコードを複数箇所で使う場合は、クラス化して継承することで保守性を高めるように意識すると良いでしょう。