На некоторых платформах MVC метод контроллера принимает содержимое URL-адреса в виде списка элементов, разделенных прямой косой чертой, полученных в качестве параметров, например,
site.com/controller/method/var1/var2
имеет связанный контроллер:
class Controller
function method(var1, var2){
}
}
Но как мне добиться этого кодирования? Я хочу начать с массива и отправить параметризованный список в функцию, т.е.
$args = array("one"=>"cheese","two"=>"eggs");
php_function("myfunction",$args);
В myfunction
, Я бы
function myfunction($one, $two){
}
Я знаю о func_get_args
для принятия неизвестного количества аргументов. user_call_func
полезно кроме
user_call_func("myfunction",$args);
…приводит к тому, что первый параметр содержит массив аргументов, без разницы func_get_args
вызывается из функции.
extract
тоже не работает, так как мне нужно получить массив как переменную внутри функции.
Мне удалось создать желаемое с помощью следующего.
class BootStrap {
private $controller = 'NameOfIle.php';
private $method = 'function()';
private $params = array('sdfds' => 'dsfdsf', 'sdfdsfsdfdsfsd' => 'sdfdsfds');public function __construct() {
call_user_func_array(array($this->controller, $this->method), $this->params);
}
}
call_user_func_array
принимает описание метода и массив аргументов и возвращает результат вызова функции. Я думаю, что он будет принимать аргументы из массива по порядку, а не по имени. Вы должны собрать массив аргументов в правильном порядке и, возможно, проверить наличие недостающих аргументов, прежде чем использовать это.