2011-12-03 12 views
0

私はPHPで実際にOOPスタイルを学習しようとしています。私はインターフェイスとクラスの両方を宣言し、インターフェイスを実装するクラスを持っています。しかし、私は、PHPスクリプトファイルにインターフェイスファイルをロードし、クラス実装ファイルを読み込む代わりにインターフェイスからメソッドを呼び出すことはできないのだろうかと疑問に思っていましたか?もしそうなら、それはどのように行われますか?私はこれに対する答えを見つけることができません。ありがとう!PHPインターフェイスメソッドを呼び出す

答えて

5

インターフェイスは実装を持たないため、できません。その目的は、(インタフェースを実装する)クラスが賞賛しなければならない "契約"( "このインタフェースを実装するクラスは公開メソッドX YとZを提供することを約束する"という意味で)を規定することです。

これは本当に基本的なOOPの基本であり、PHPには当てはまりません。あなたがさらに進歩する前に、いくつかのOOP理論を勉強することをお勧めします。

+0

ありがとうございました!いや私は本からいくつかのものを読んだ後に混乱し、それが私に言いたいことだと思っていました。 LOL Imは物事を行う手続き的な方法に慣れています。 – vol4life27

2

インターフェイス上でメソッドを呼び出すことはできません。インタフェースをインスタンス化することはできません。インターフェイスを実装するクラスを作成し、代わりにそのクラスを使用する必要があります。

0

インターフェイスは、一連の関数を記述し、実装クラス内でそれらの関数の最終実装を隠すことができるように提供されています。これにより、使用方法を変更することなく、それらの機能の実装を変更することができます。

例:データベースがあります。私は自分のデータベース内のデータにアクセスするクラスを作成したいと思います。

interface Database { 
function listOrders(); 
function addOrder(); 
function removeOrder(); 
... 
} 

その後、我々は、MySQLデータベースを使用して起動するとしましょう:私はこのようなインタフェースが定義されます。したがって、MySQLデータベースにアクセスするためのクラスを作成します。

class MySqlDatabase implements Database { 
function listOrders() {... 
} 

これらのメソッドは、MySQLデータベーステーブルに到達するために必要に応じて記述します。コントローラを作成して、インタフェースを次のように使用することができます。

$database = new MySqlDatabase(); 
foreach ($database->listOrders() as $order) { 

次に、Oracleデータベースに移行することにします。私たちは、次のようなOracleデータベースに到達するために別のクラスを書くことができ:

class OracleDatabase implements Database { 
public function listOrders() {... 
} 

その後 - 代わりに、我々は唯一の1行のコードを変更する必要がMySQLデータベースのOracleデータベースを使用するために私たちのアプリケーションを切り替えるには:

$database = new OracleDatabase(); 

ようなコードの他のすべての行、:

foreach ($database->listOrders() as $order) { 

は変わりません。要点は - INTERFACEは私たちのデータベースにアクセスするために必要なメソッドを記述します。どのようにしてそれを実現するかについては説明していません。それがIMPLEMENTingクラスの機能です。我々は、必要なだけ多くの異なる方法で必要なだけ、このインターフェースを実装することができます。インタフェースが実際の動作に関係なくどのように使用するかを定義するため、インタフェースの実装間を切り替えることができます。

関連する問題