Php 如何处理不存在/动态创建的方法?
假设我已经动态创建了映射数据库表行的对象。在编写代码时,我对表的列一无所知。所以我在字段中存储的是数据库连接、表名和主键。我想创建一个方法来接收字段,但不是:Php 如何处理不存在/动态创建的方法?,php,oop,Php,Oop,假设我已经动态创建了映射数据库表行的对象。在编写代码时,我对表的列一无所知。所以我在字段中存储的是数据库连接、表名和主键。我想创建一个方法来接收字段,但不是: $field_value = $row_object->get_field("weight"); 我希望使用我的对象的代码如下所示: $field_value = $row_object->get_field_weight(); //where weight is column name in db 我不知道在编码时需要什
$field_value = $row_object->get_field("weight");
我希望使用我的对象的代码如下所示:
$field_value = $row_object->get_field_weight(); //where weight is column name in db
我不知道在编码时需要什么确切的名称,比如get_field_weight()。
我如何实现这一点?您可以使用神奇的方法:
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];
}
}
您也可以将其用于“设置”操作,并进行进一步的改进。我真的希望这是一个很久以前回答的问题的副本,但无论是使用内置搜索还是使用google,我都找不到答案。如何?请尝试使用
->getWeight()
。这些叫做神奇的方法。哦,对了,谢谢。我确信这是可以做到的,但我没有想到在“魔法”和“重载”关键字下搜索。