4

データベースから初期化されるクラスの階層があります。さまざまな数のプロパティをサポートするために、共通のItem基本クラスの配列で__get()と__set()を使用しています。Itemから派生した1つのクラスであるUserProfileは、ユーザーデータを格納するために使用されます。私のデータベースには、1人のユーザーの複数の電話番号を格納するためのユーザーテーブルと1対多の関係を持つ電話番号テーブルがあります。携帯電話がある場合、UserProfileオブジェクトにはモバイルフィールドがあります。家庭でもビジネスでも同じです。番号が存在しない場合、プロパティは存在しません。

これらのプロパティの存在をテストしたいときに問題が発生します。私が次のようなコードを使用するとき

if (isset($clientData->home_phone))
{
$this->startElement('phone');
$this->writeAttribute('phone_number_type','home');
$this->writeRaw($clientData->home_phone);
$this->endElement();
}

この関数は常にfalseを返します。角かっこを使用してphpに最初に変数を取得するように指示しようとしましたが、エラーが発生しました。isset()の機能をシミュレートするために特別なattributeExists()関数が必要ですか、それとももっと簡単なアプローチがありますか?

なんらかのエラーなしに動的プロパティの存在をテストするにはどうすればよいですか?

4

2 に答える 2

6

と同様に機能すると呼ばれる魔法のメソッドがあります。動的プロパティでissetを呼び出すことができます__isset()__get()__set()

于 2011-10-23T03:06:55.643 に答える
3

__isset()は、アクセスできないプロパティでisset()またはempty()を呼び出すことによってトリガーされます。

__isset()あなたはそれを行うための魔法の方法を定義することができます。ここを参照してください

于 2011-10-23T03:15:05.383 に答える