私は自分のサービスクラス用の汎用インターフェイスを作成しようとしています。私はインターフェイスを使用する2つのクラスに問題があります。それらはcreateというメソッドを共有します。 createメソッドは、3つのパラメータを除いています。私は、3つ目のパラメータをオプションにして、両方のクラスがそれに対応できるようにしたいと思います。PHPインターフェイスのオプションパラメータ
interface ServiceInterface{
public static function create($var1, $var2, $thisOneIsOptional);
}
class ServiceObject1 implements ServiceInterface{
public static function create($url, $server){
//....
}
}
class ServiceObject2 implements ServiceInterface{
public static function create($methode, $url, $id){
//....
}
}
これは、メソッドを別の方法で使用できるようにするインターフェイスを持つのが直感的なものです。インタフェースの目的は、実装クラスをどのように使用するかを正確に知ることです。 1つのサービスが '$ id'を必要としないが、もう1つのサービスが必要であれば、それは依然として必要です。それを無視するだけのサービスです。 –
パブリックstatic function create($ var1、$ var2、$ thisOneIsOptional = '');または配列の場合static static function create($ var1、$ var2、$ thisOneIsOptional = []); –
オプションのパラメータとそれを必要とする実装を持つインタフェースを使用することはできません。これは、署名に互換性がないことを意味します。すべての可能な実装に合うようにインターフェースを一般化できない場合は、インターフェースはあなたが探しているものではありません。 – iainn