たかおLab

【PHP】インターフェースの使い方とそのメリット

PHP プログラミング
PHPのロゴ画像

PHPのインターフェースについて勉強するのをサボっていたのですが、Laravelの勉強をする中でチラホラ出てくるので、ちゃんと勉強してみました。

 

 

 

インターフェースって何?

 

クラスで実装すべきメソッドを規格として定めるもの。

しかし、メソッドの中身までは指定しません。

 

例えば、hello()メソッドの実装を指定したWorldRuleインターフェースがあるとします。

このインターフェースはhello()メソッドの実装を指定しますが、hello()メソッドの中身までは指定しません。

 

 

インターフェースを定義する

 

 

例として、hello()メソッドの実装だけを指定したWorldRuleインターフェースを作ってみます。

 

 

 

インターフェースを採用する

 

インターフェースを採用するクラスでは、implementsでインターフェースを指定します(複数指定も可能)。

 

 

例として、先ほどのWorldRuleインターフェースを採用するMyClassクラスは以下のようになります。

 

 

 

これ、役に立つの?

 

使い方はわかったけどメリットがイマイチ分からなかったので、そこも調べました。

 

インターフェースを使うメリットは、ズバリ「密結合を無くすこと」です。

 

例えば…

 

DBにアクセスするクラスAがあり、そのクラスAのメソッドを利用するクラスBがあるとします。

 

しかし時が経ち、クラスAで使っていたDBを別のものに変えたため、クラスAの代わりに新しくクラスCを作ったとします。

 

この時、クラスAがインターフェースを採用していれば、同じようにクラスCもインタフェースを採用することで、クラスCのメソッドが今までのクラスAと同じであることが担保されます。

 

よってクラスBは、今までのクラスAと同じようにクラスCのメソッドを使うことができます。

 

もしインターフェースを採用していなければ、新しく作られたクラスCに伴い、クラスBの中身もそのクラスCに合わせるためにリファクタリングする必要が出てきてしまいます。

 

 

参考文献

詳細!PHP 7+MySQL 入門ノート

インターフェースって何のメリットがあるんですか? | teratail

Laravelで始める依存性の注入(DI) – Qiita