あなたのコードはてICalendarのいずれかの実装で動作することを保証するためのインタフェースを定義します。
interface ICalendar {
public function method1();
public function method2();
}
は実装を作成します。
class Calendar implements ICalendar {
public function method1() {}
public function method2() {}
}
class MaterialCalendar extends Calendar {
public function method1() {}
public function method2() {}
}
シンプルなコンテナどこかで、あなたがしなければならないブートストラップで
class SimpleContainer {
private static $binds = [];
public static function bind($interface, $class) {
self::$binds[$interface] = $class;
}
public static function make($interface) {
if (array_key_exists($interface, self::$binds)) {
return new self::$binds[$interface];
}
throw new \Exception("Interface is not binded");
}
}
をインターフェイスにバインドするクラスを特定する:
SimpleContainer::bind(ICalendar::class, MaterialCalendar::class);
カレンダーオブジェクトを取得する必要があるすべての場所で次のコードを使用します。
SimpleContainer::make(ICalendar::class);
これらのクラスまたは静的クラスを実装するオブジェクトがありますか? –
@MaciejSikoraはありません、彼らは静的ではありません – user6784929
あなたがhttp://php.net/manual/en/internals2.opcodes.instanceof.php –