0

データベース テーブルの行をマップするオブジェクトを動的に作成したとします。コードを書いている時点では、テーブルの列についてはわかりません。したがって、フィールドに保存するのは、データベース接続、テーブル名、および主キーです。そして、フィールドを受け取るメソッドを作成したいのですが、代わりに:

$field_value = $row_object->get_field("weight");

オブジェクトを使用するコードを次のようにします。

$field_value = $row_object->get_field_weight(); //where weight is column name in db

コーディング時に get_field_weight() などの正確な名前が必要になるかどうかはわかりません。どうすればこれを実装できますか?

4

1 に答える 1

2

あなたは__call()魔法の方法を使うかもしれません:

class MyMapper{

    public function __call($method, $args){
        $parts = explode('_', $method);

        $field = array_pop($parts);

        if(!array_key_exists($field, $this->fields)){
            throw new NoSuchFieldException();
        }

       return $this->fields[$field];
    }
}

これを「設定」操作に使用することもできますが、さらに改善されています。

于 2013-05-23T09:32:15.853 に答える