PHP中参数类型化的动态方法

PHP中参数类型化的动态方法,php,methods,dynamic-typing,Php,Methods,Dynamic Typing,下面是PHP遗留代码,它打算动态返回方法的名称 public function getMethod($fieldName){ //do stuff return $methodName; } 返回的方法名称类似于: setClient 集合名 设置 好的。 问题是当我使用这些方法时。我有一个名为Model的类,它具有以下方法: class Model { public function find () { $nameClass = get_called_

下面是PHP遗留代码,它打算动态返回方法的名称

public function getMethod($fieldName){
    //do stuff
    return $methodName;
}
返回的方法名称类似于:

setClient

集合名

设置

好的。 问题是当我使用这些方法时。我有一个名为Model的类,它具有以下方法:

class Model {
    public function find () {
        $nameClass = get_called_class();
        $instance  = new $nameClass;

        $result = $this->conn->select();//the select method returns a SQL SELECT from the database

        if (isset($result[0])) {
            foreach ($result[0] as $key => $val) {
                $methodProp = $this->getMethod(key);
                $instance->$methodProp($val);
            }
        } else {
            throw new Exception('You have a error in your class');
        }
    }

}
以下是请求的
var\u转储($result)

array (size=1)
    0 => 
    object(stdClass)[6]
         public 'id' => string '1' (length=1)
         public 'id_erp' => string '0' (length=1)
         public 'name' => string 'Derp' (length=18)
         public 'email' => null
         public 'type_ota' => null
         public 'user' => string 'derp_derp' (length=7)
         public 'password' => string '1234' (length=4)
         public 'url_logo' => null
         public 'status' => string '1' (length=1)
         public 'date' => string '2015-06-08 14:41:50' (length=19)
然后我有一些类扩展了这个模型:

class Company extends Model {
    public function setClient (Client $cli) {
       //do stuff
    }
    public function setName($name) {
       //do stuff
    }
    public function setAge($age) {
       //do stuff
    }
}
//here I use the class
$myCompany = new Company();
$myCompany->find();
方法
setName()
setAge()
工作正常,但
setClient()
返回

可捕获致命错误:传递给setClient()的参数1必须是客户端实例,字符串为

简而言之,如何在PHP中处理动态方法和键入? 在寻求帮助时,我发现了一些,但我以前从未使用过这个类,我发现的示例对我没有帮助,尽管我认为这是正确的方法

有没有人有过类似的经历

更新

我试图在我的问题中加入一些代码来澄清我的问题。

你的问题就在这里

public function setClient (Client $cli) {
   //do stuff
}
看看如何在参数旁边有一个类名?这就是所谓的。这意味着参数必须是您指定的类的实例,否则您将得到您发布的错误。在你的代码中的某个地方你正在呼叫

$method($param);
而且,
$param
不是
客户端的实例。这就是你必须解决的问题。无论调用什么
setClient
,都必须有
Client
的实例

$param = new Client();
$method($param);

如果我正确理解了您的问题,您需要检查该方法需要什么类型的提示。我从中获取了这段代码片段


请发布实际代码。问题不在您添加的示例中,
var_dump($result[0])请再加上这个?@Machavity完成。谢谢你的帮助。事实上,我不能这么做。请参阅,
getMethod()
返回方法的动态名称,因此,当我调用该方法时,我不知道参数的类型。如果我使用
Client
的一个实例,并且
getMethod
返回一个
setPerson
引用
setPerson(Person$p)
,我会再次收到错误。如果没有更多的代码,我不确定我是否可以进一步帮助您。这似乎是一种奇怪的程序结构方式。代码不会有帮助,因为这是一团乱麻(这不是我的错,我来的时候已经是这样了),但我会尝试编辑我的问题来澄清。谢谢。