0

我将以下代码添加到由我的所有控制器扩展的 MY_Controller 中:

public function _remap($method, $params = array())
    {//exit($this->router->fetch_class());
        if (array_search($method, $this->private_methods) !== false && !$this->logged_in)
        {
            $this->session->set_flashdata('message', array(
                                                        'message'   =>  'You must login to access the requested area',
                                                        'error'     =>  1
                                                        )
                                        );
            redirect('/');
        }
        else if (method_exists($this, $method))
        {
            $this->$method($params);
        }
        else
        {
            redirect('/');
        }

    }

正在创建的问题是调用$this->$method($params)将参数压缩到一个数组中。因此,以下方法会中断:

function some_method($param1, $param2, $param3)

有没有办法将这个数组分解成这样的函数的单个项目?

4

2 回答 2

1

我试图做同样的事情并发现同样的问题

$this->$method($params);

我找到了另一个选择

call_user_method_array($method,$this,$params);

哪个有效但已被弃用。 不推荐使用 PHP 中的函数,我现在应该使用什么?

但希望这是新的。

call_user_func_array(array($this,$method), $params);
于 2014-03-05T12:21:31.437 回答
1

我已经尝试过了,它对我有用

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

      if($method == 'delete_photo' || $method == 'delete_video'){

        call_user_func_array(array($this,$method), $params);
        }

      else{
        $this->$method();
        }
      }
      else {
      $this->index($method);
    }
  }

现在您只需将“delete_photo”和“delete_video”替换为包含参数的方法名称,当然您可以添加任意数量的方法。

于 2017-12-04T15:14:22.120 回答