php オブジェクトインターフェイス
interfaceとは?
インターフェイスにより、あるクラスが実装する必要があるメソッドの 種類を、これらのメソッドの実体を定義することなく、指定するコードを作成できるようになります。
→ メソッドの宣言の集合
<?php interface Car { public function run(); public function stop(); }
↓ 実装 implements演算子
<?php Class Mira implements Car { public function run() { //何らかの処理 } public function stop() { //何らかの処理 } }
Q機能を実装しているクラスだけでいいのでは?
A オブジェクト指向においてインターフェイスという機能がなくてもプログラムはいくらでもかける。
<?php // Carインターフェイスを通じて何らかの処理を遂行する関数procedure function procedure(Car $somecar) { $somecar->run(); // 何らかの処理 $somecar->stop(); }
引数$somecarの部分でタイプヒンティングすることで、
$somecarは、Carインターフェイスを実装したクラスのインスタンスであることが保障。
<?php function procedure(Mira $mira) { $mira->run(); // 何らかの処理 $mira->stop(); }
Q上記のようにインターフェイスを使わずに実装クラスでタイピングすればいいのでは?
Aprocedure関数はMiraクラスの実装に依存する形になってしまう。
<?php class Copen implements Car { public function run() { } public function stop() { } }
Carインターフェイスでタイプヒンティングするのであれば、このクラスのインスタンスは、procedure関数に渡すことができる!
つまり
(解決策)
インターフェイスを使うことで特定のクラスの実装に依存しないタイプヒンティングが可能になる。
いわゆる機能(メソッド宣言)と実装の分離。
これにより型の安全性と柔軟さを同時に得られる!!!!!!
**
他の軽量言語にインターフェイスがなく、PHPにだけある理由
簡潔な記述よりも、記述のわかりやすさや型の安全性を重視しているPHPの設計思想の表れ
http://blog.tojiru.net/article/377526320.html http://blog.anatoo.jp/entry/20080517/1211029059