abstract修飾子
abstract修飾子をつけることができるのはクラスとメソッドのみです。クラスにabstract修飾子をつけると、そのクラスはインスタンス化できません。
abstractクラスにabstractメソッドを含める必要はありません。
<?php //親クラス(抽象クラス) abstract class ParentClass { public function ParentMethod(){ print('ParentMethod</br>'); } } //子クラス class ChildClass extends ParentClass{ }> //使用例 //ParentClassはインスタンス化できない。 //$parent = new ParentClass(); //ParentClassを継承したChildClassをインスタンス化する。 $child = new ChildClass(); $child->ParentMethod(); ?>
メソッドにabstract修飾子をつけると、そのメソッドはサブクラスで必ずオーバーライドしなければなりません。
abstractメソッドを定義しているクラスはabstract修飾子をつけなければなりません。
abstractメソッドはメソッド定義だけを宣言し、処理内容は定義しません。
abstractメソッドをオーバーライドした際のアクセス修飾子は、abstractメソッドで定義した修飾子より同じか緩くする必要があります。
たとえばprotectedで定義したabstractメソッドをオーバーライドするときは、protectedまたはpublicにします。
abstractメソッドをオーバーライドしたとき、引数はabstractメソッドと同じにするか、省略可能な引数を追加することができます。
コンストラクタもabstract修飾子をつけることができます。
PHP5.4以前ではコンストラクタの引数はオーバーライド元のメソッドと違ってもよかったようですが、PHP5.4以降からは引数は同じか、省略可能な引数を追加することができます。
<?php //親クラス(抽象クラス) //abstractメソッドを定義しているクラスはabstract修飾子をつける abstract class ParentClass { //abstractメソッドはメソッド定義だけを宣言し、処理内容は定義しません。 protected abstract function AbstractMethod($value); //コンストラクタもabstractメソッドにすることができます。 protected abstract function __construct(); } //子クラス class ChildClass extends ParentClass { //abstractメソッドをオーバーライド //アクセス修飾子は、abstractメソッドで定義した修飾子より同じか緩くする //引数はabstractメソッドと同じにするか、省略可能な引数を追加することができます public function AbstractMethod($value, $str='') { } //コンストラクタをオーバーライド //引数はabstractメソッドと同じにするか、省略可能な引数を追加することができます public function __construct($str=''){ } } ?>
0 件のコメント:
コメントを投稿