インターフェース
インターフェースを定義するにはclassキーワードの代わりにinterfaceキーワードを使用します。インターフェース内のメソッドは抽象メソッドになるので、メソッドの宣言だけを定義し、処理内容は定義しません。
メソッドにはabstractキーワードは付けません。
アクセス修飾子はpublicのみが指定できます。
interface インターフェース名 { public function メソッド名($arg1); }
インターフェースを実装するにはimplementsキーワードを使用します。
複数のインターフェースを実装するにはインターフェース名をカンマで区切ります。
インターフェースを実装したクラスは、インターフェースに定義されているメソッドをすべてオーバーライドする必要があります。
メソッドをオーバーライドしたとき、引数はオーバーライド元のメソッドと同じにするか、省略可能な引数を追加することができます。
class クラス名 implements インターフェース名1, インターフェース名2 { public function メソッド名($arg1, $arg2=''){ 処理内容; }; }
コンストラクタもインターフェースで定義することができます。
マニュアルには「ひとつのクラスの中で、同じ名前の関数を含む 2 つのインターフェイスを 実装することはできません。あいまいさを解決できなくなるためです。」とありましたが 、実装してもエラーにはならないようです。
<?php //インターフェース1 interface MyInterface1 { public function Method(); public function Method1($value); public function __construct(); } //インターフェース2 interface MyInterface2 { public function Method(); public function Method2($value); } //インターフェースを実装したクラス class MyClass implements MyInterface1, MyInterface2 { public function Method1($value, $str='') { print('Method1</br>'); } public function Method2($value, $str='') { print('Method2</br>'); } public function Method(){ print('Method</br>'); } public function __construct($str=''){} } //使用例 $obj = new MyClass(); $obj->Method(); $obj->Method1(1); $obj->Method2(2); ?>実行結果
インターフェースを継承し新たなインターフェースを作成することができます。
<?php //親インターフェース interface ParentInterface { public function Method1(); } //子インターフェース interface ChildInterface extends ParentInterface { public function Method2(); } //親インターフェースを実装したクラス class Class1 implements ParentInterface { public function Method1() { print('Method1</br>'); } } //子インターフェースを実装したクラス class Class2 implements ChildInterface { public function Method1() { print('Method1</br>'); } public function Method2() { print('Method2</br>'); } } //使用例 print('-----Class1-----</br>'); $class1 = new Class1(); $class1->Method1(); print('-----Class2-----</br>'); $class2 = new Class2(); $class2->Method1(); $class2->Method2(); ?>実行結果
0 件のコメント:
コメントを投稿