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 に答える