【问题标题】:How can I pass an array to a method?如何将数组传递给方法?
【发布时间】:2017-04-28 04:38:24
【问题描述】:

这是我当前的代码:

public function myfunc( $class_name, $method_name, array $params = [] ) {
    $obj = new $class_name();
    if ($obj->$method_name()['status']) {
        // do stuff
    }
}

我当前的代码也可以。现在我需要将$params 数组传递给$method_name() 方法。所以我使用call_user_func_array PHP 函数。这是我的新代码:

public function myfunc( $class_name, $method_name, array $params = [] ) {
    $obj = new $class_name();
    if (call_user_func_array($obj->$method_name()['status'], $params)) {
        // do stuff
    }
}

但是在这个版本中,它会抛出这个错误:

call_user_func_array() 期望参数 1 是一个有效的回调,没有给出数组或字符串

你能告诉我如何解决它吗?

【问题讨论】:

    标签: php arrays function oop parameter-passing


    【解决方案1】:

    call_user_func_array() 调用回调(它是一个数组,函数字符串名称),其中参数列表作为数组给出。你可以做

    call_user_func(array($obj, $method_name), $params)['status']
    

    表达式array($instance, $methodname)是php中回调的表示,即方法$instance->$methodname

    【讨论】:

    • 行不通..它会抛出 Call to undefined function method_name()
    【解决方案2】:

    在此代码中,您必须创建 $params 数组并对其进行初始化,然后在函数调用中作为参数传递。见以下代码:

     $params = array();
     $params[0]=anyVal;
     $params[1]=anyVal;
     $params[n]=anyVal;
    
     if (call_user_func_array($obj->$method_name()['status'], $params))
     {
        // do stuff
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-04
      • 2010-10-23
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多