PHP でインターフェイスはいつ使用されますか?注意すべきこと
インターフェースを使用すると、クラスが実装する必要があるメソッドを指定できますが、これらのメソッドの特定の内容を定義する必要はありません。
インターフェイスは、標準クラスの定義と同様に、interface キーワードを通じて定義されますが、その中で定義されているメソッドはすべて空です。
インターフェースで定義されるすべてのメソッドはパブリックである必要があります。これはインターフェース
インターフェイスを実装するには、implements 演算子を使用します。クラスは、インターフェイスで定義されたすべてのメソッドを実装する必要があります。実装しない場合は、致命的なエラーが報告されます。クラスは複数のインターフェイスを実装できます。複数のインターフェイスの名前を区切るにはカンマを使用します。
実際的な例として、mysql 拡張関数を使用してカプセル化されたデータベース操作クラス DBMySQL を作成し、よく使用されるいくつかのメソッド (getAll、getOne、delById、delAll、update、save など) を作成しました。
現在、mysql 拡張機能は公式 Web サイトによって完全に廃止されているため、mysqli または pdo-mysql 拡張機能を使用してデータベース操作クラス
をカプセル化するのを手伝ってくれるよう同僚に頼みました。
もしかしたら、彼のスタイルは私の元のスタイルとは異なっているかもしれません。あるいは、彼は delById と delAll はもう必要ないので、1 つの Del メソッドを統合する必要があると感じています。
このように、新しい操作クラスを使用したい場合は、元の操作クラスを使用するプロジェクト内のすべての場所を変更する必要があります。
別の例を挙げると、私は mysqli が使いやすいと考え、同僚 A は PDO-mysql が使いやすいと考え、モジュールを作成する同僚 C は私がどれでも使えると考えています。ただし、同僚 C に一連の mysqli メソッドと別の一連の pdo-mysql メソッドを作成するよう依頼することは不可能です。mysqli メソッドを使用してデータベース操作クラスを閉じ、pdo-mysql メソッドを使用してデータベースを閉じることもできます。次に、同じ機能を実装する 2 つの操作クラスのメソッド名とパラメーターが同じであることが規定されるため、同僚 C はモジュールとロジックの作成に集中できます。
それでは、同僚の A と私が作成したデータベース操作クラスのメソッドの一貫性を確保するにはどうすればよいでしょうか?
インターフェースの使い方はこんな感じです。それを実装するすべてのクラスは、それが指定するメソッドを持たなければならず、それ以外のものは機能しないと規定されています。このように、インターフェースを記述してメソッドを指定すれば、同僚 C はこのインターフェースを参照して、このインターフェースのメソッドを呼び出すことができます。