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