<?php
include 'libs/Arg.php';
$method = 'test';
$params = $_REQUEST;
$arg = new Arg;
$arg->{$method}($params);
<?php
class Arg
{
public function test($arguments)
{
extract($arguments);
echo $name;
echo $age;
}
}
我想使用arg.php作为ajax适配器,通过方法名称调用类函数,但是在函数$arguments
中将是不明确的,我可以转换参数并使其对应于函数参数吗?
答案 0 :(得分:2)
你可以在
的帮助下实现它call_user_func_array()
例如,如果你有参数名称和年龄,那么你可以写这样的函数
public function test($name,$age) {
}
include 'libs/Arg.php';
$method = 'test';
$params = $_REQUEST;
$arg = new Arg;
call_user_func_array(array($arg,$method), $params);
class Arg
{
public function test($name,$age)
{
echo $name;
echo $age;
}
}
因此您不需要使用$ arguments并将其解压缩。正如你在帖子中提到的那样,它含糊不清。希望这会对你有所帮助。
答案 1 :(得分:0)
通过位置传递参数可以使用call_user_func_array
轻松完成。
如果要将名称与名称匹配,则需要使用一些reflection:
$method = 'test';
$params = $_REQUEST;
$obj = new Arg;
$ref = new ReflectionMethod($obj, $method);
$arguments = array_map(
function (ReflectionParameter $param) use ($params) {
if (isset($params[$param->getName()])) {
return $params[$param->getName()];
}
if ($param->isOptional()) {
return $param->getDefaultValue();
}
throw new InvalidArgumentException('Missing parameter ' . $param->getName());
},
$ref->getParameters()
);
$ref->invokeArgs($obj, $arguments);