0

オブジェクト、人、建物のデータベースがあるとしましょう。

個人IDの例はPRS001です。

建物IDの例はBUL001です。

人はすべての人を保持するテーブルです。建物は、すべての建物を保持するテーブルです。オブジェクトは、すべての人とすべての建物を保持します。

オブジェクトからすべてのデータを抽出した場合、それが人であるか建物であるかをどのように知ることができますか?

私はこのようなことをすることができます:

if(start_of_string_is(BUL))
    then it's a building
else if(start_of_string_is(PRS))
    then it's a person

しかし、この結果を達成するためのより簡潔でセクシーな方法はありませんか?

4

2 に答える 2

1

あなたはここで根本的な設計上の欠陥を作っています。Apersonはではなくbuildingabuildingはではありませperson

オブジェクト指向の世界では、これらは異なるタイプのオブジェクトであり、オブジェクトのインスタンスをそのタイプと照合するには、InstanceOfを使用します。

さらに、キーを使用してレコードに関する情報を取得しています。これは、キーが機能すると想定している方法ではありません。キーは、意味を持たずにレコードを一意に識別します。

さらに悪いことに、すでに2つのテーブルがあります。では、personsテーブルからpersonオブジェクトをインスタンス化し、buildingsテーブルからbuildingオブジェクトをインスタンス化してみませんか。PDOは、フェッチ時にこれらのオブジェクトを自動的にインスタンス化できます。

例:

$person = $statement->fetchObject ( 'person' );

Personsテーブルから行をフェッチするとき。

于 2012-10-25T12:05:41.327 に答える
-1

グーブリさん、文字列は常に3文字で始まるとのことでしたが、次のようにできます。

// Sample:

$ids = array('BUL001', 'PRS001');

foreach($ids as $id) {
    switch (substr($id, 0, 3)) {
    case 'BUL':
        // it's a building
        break;
    case 'PRS':
        // it's a person
        break;
    default:
        // invalid
        break;
    }
}
于 2012-10-25T13:24:56.707 に答える