Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何处理不存在/动态创建的方法?_Php_Oop - Fatal编程技术网

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()
。这些叫做神奇的方法。哦,对了,谢谢。我确信这是可以做到的,但我没有想到在“魔法”和“重载”关键字下搜索。