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 件のコメント:
コメントを投稿