如何处理不存在/动态创建的方法?

时间:2013-05-23 09:25:19

标签: php oop

假设我已经动态创建了映射数据库表行的对象。在编写代码时,我不知道表的列。所以我在字段中存储的是数据库连接,表名和主键。我想创建一个接收字段的方法,而不是:

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

我希望使用我的对象的代码看起来像这样:

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

我不知道在编码时需要什么样的名字,比如get_field_weight()。 我该如何实现呢?

1 个答案:

答案 0 :(得分: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];
    }
}

您也可以将此用于“设置”操作,并进一步改进。