2012-02-18 74 views
1

call_user_func_array()'s PHP manual's examples只能让我更容易混淆foobar变量!在codeigniter的_remap方法中使用call_user_func_array()

无论如何,请考虑_remap及以下ComplexFunction

class MyClass extends CI_Controller 
{ 

    public function _remap($method, $params = array()) 
    { 

     if (method_exists($this, $method)) 
     { 
      return call_user_func_array(array($this, $method), $params); 
     } 

    } 

    public function ComplexFunction($param1, $param2, $param3, $param4) 
    { 
     // process 
     return 'done'; 
    } 

} 

现在这段代码工作的正确?

$params = array(
       'param1' => '1', 
       'param2' => '2', 
       'param3' => '3', 
       'param4' => '4' 
       ); 

$myObject = new MyClass(); 

$output = call_user_func_array(array($myObject, 'ComplexFunction'), $params); 

echo $output; 
  1. 请问$outputdone
  2. 这是一个在codeigniter的_remap()函数中使用的可靠方法吗?
+1

你试过了吗?你为什么要像这样实例化控制器? – 2012-02-18 13:20:34

+0

其实我一直在寻找一个通用的方法。这不是我使用我的控制器的方式。在我的控制器中还有许多其他方法。我应该使用'_remap'函数,因为'search()'方法应该有许多可选参数以用户定义的顺序传递。 – 2012-02-18 17:16:16

回答

1

这将不起作用,因为_remap()函数由CI的核心函数调用,并且它为匹配路由中的每个段传递了一个单独的参数。您绝不应该自己拨打_remap()方法!