0

データベースの状態を保持する一連のクラスがあります。マイクロ ORM パターンのようなものです。したがって、このソリューションでは、いくつかのテーブルの構造を動的プロパティとしてクラスにロードし、クラスが次のようになるようにします。

  • 物体
    • [tbl_name]
      • 属性1
      • 属性2
      • 属性3
    • [tbl_name]
      • 属性1
      • 属性2
      • 属性3

次のように設定したため、すべての属性はパブリック プロパティです。

$object->{$table_name}->{$attribute} = 'foobar';

私が望むのは、これらの動的に設定されたプロパティを非公開にすることです。なんで?ここで皮肉なことをお見逃しなく、__get() と __set() を使用してオーバーロードされた getter/setter を介してそれらを再度公開したいからです。再び、なぜなのかという問題に戻ります。実際には、「取得」の場合はパブリック プロパティで問題ありませんでしたが、設定の場合は、設定を許可する前にいくつかのロジックを適用したいと考えています。これは、私が達成しようとしていることのアイデアを提供する単純化された __set() 関数です。

public function __set ( $property , $value ) {

    if ( !in_array ($property , $blocked_properties) ) {
        $this->property = $value;
        $this->trigger_event ( $property );
    }
}

わかる?この問題を別の方法で解決できれば幸いですが、プライベート インスタンス変数を動的に設定できれば、これは非常に適切な方法のように思えます。

4

1 に答える 1

0

これらの実際のプロパティを作成せず、それらをprivate配列に格納し、魔法のメソッドを介してのみアクセスします。

class ORM {

    private $fields = array();

    public function __get($name) {
        return $this->fields[$name];
    }

    public function __set($name, $value) {
        $this->fields[$name] = $value;
    }

}

それはまさにあなたが望むように振る舞います。

于 2012-08-27T16:06:09.573 に答える