MySQL データベースとテーブル tobjects があり、各レコードにはid
, parameter
, (XML のようなもの) があり、この列がオブジェクトの「タイプ」を決定するvalue
と言えます。parameter
オブジェクトは、そのタイプに応じて他のいくつかのテーブルで使用されるため、それぞれを特定の方法で処理する必要があります。
「処理」はやや一般的であるため (私は同じ関数を使用します)、他のクラスを継承する TObject クラス (抽象的ではありませんが、抽象的である可能性があります) を作成しました。この継承方法は非常に便利で、それこそが私がオブジェクト指向プログラミングを使用する理由です。たとえば、TObject にはretrieve()
、必要なすべてのデータを db から取得するメソッドがあり、tobjects テーブル内のものではなく、タイプに依存する他のデータも取得するため、いくつかのクラスでそれをオーバーライドします。
私が遭遇した問題は、オブジェクトを作成するときに、それがどのクラスであるべきかわからないことです。もちろん、SELECT Parameter FROM tobjects WHERE id=$id
( を使用してswitch
) 適切なクラスのオブジェクトを作成し、そのretrieve()
メソッドを使用して (各クラスは異なるデータを取得し、tobjects からのデータのみが共通です)、db からデータを取得します。これにより、クエリ 2 を実行します。時間とクラス外の作業の一部は機能しますが、穏やかではありません。
最善の解決策は、TObject を作成し、取得時にオブジェクトのクラスを必要なクラスに変更することです。これは TObject の子孫になりますが、それが不可能であることはほぼ確実です。
オブジェクトのクラスを決定するためだけに tobjects から 1 つのフィールドを選択するためだけに最初のクエリを実行するという私の解決策はありますか? または、実行時にオブジェクトのクラスを変更するトリックはありますか?