インターフェイスはあるクラスが実装するべきメソッドを定義する仕組みです。あるクラスにおいてインターフェイスを用いると宣言したにも関わらず、インターフェイス内で定義したメソッドが足りないならばエラーになります。
PHP: オブジェクト インターフェイス – Manual
例えば次のインターフェイスならば
use Illuminate\Database\Eloquent\Builder; interface Searchable { public function scopeSelectForSearch(Builder $query): Builder; public function scopeWhereForSearch(Builder $query, array $search_criteria): Builder; public function scopeSortForSearch(Builder $query, array $sort_option): Builder; }
次の様に実装を強要できます。
use Illuminate\Database\Eloquent\Builder; class Hoge implements Searchable { public function scopeSelectForSearch(Builder $query): Builder { // 検索用select文クエリ構築 return $query; } public function scopeWhereForSearch(Builder $query, array $search_criteria): Builder { // 検索用where文クエリ構築 return $query; } public function scopeSortForSearch(Builder $query, array $sort_option): Builder { // 検索用order byt文クエリ構築 return $query; } }
インターフェイスはコーディングの自由度を下げる仕組みです。一定の制約を設けることによって一貫性を持ったコーディングを実現します。例のSearchableインターフェイスを実装したクラスならば、必ずBuilderクラスないしBuilderクラスを継承したクラスのインスタンスを引数にするscopeSelectForSearchメソッドが存在し、そのscopeSelectForSearchメソッドからはBuilderクラスないしBuilderクラスを継承したクラスのインスタンスが返ってくる、と保障されます。一人で小さいプログラムを組んでいるときには開発速度の障害であり無縁な方が良い位の仕組みですが、相手の頭の中を簡単に知れない多人数開発であったり記憶が飛ぶ様な大規模開発では、インターフェイスによるクラス設計がソースコードの破綻を防ぎます。
インターフェイスは便利な仕組みですが、インターフェイスで定義された決まりきった構文をいちいち書いたりコピペして直したりするのは面倒です。PhpStormにはこれを自動で記述する仕組みが備わっています。
Alt+Insert→メソッドの実装→実装するメソッドを選択→OK、で宣言がずらっと並びます。便利です。PhpStormのAlt+Insertからは他にも決まりきった文字列を色々出力できます。例はPHPですがJavaScriptにも対応しています。