我有一个包含 4 个条目的 php 数组。我需要使用数组中的数据调用类方法。
$array = array('USER', 'username', 'other', 'test');
我想用它来生成这个
$array[0]::find_by_$array[1]($array[3]);
它必须看起来像
USER::find_by_username(test);
如何将数组值转换为这一行?
正确的语法是什么?
call_user_func_array(array($array[0],'find_by_'.$array[1]),$array[3])
但这不是管理代码的最干净的方法,没有验证类或方法是否存在,因此可能会失败
您可以使用
call_user_func_array
来调用 callback,并以数组作为参数:
$callback = array($array[0], 'find_by_'.$array[1]);
$params = array($array[3]);
$ret = call_user_func_array($callback, $params);
call_user_func_array(array($array[0], 'find_by_'.$array[1]), $array[3]);
您已经非常接近 PHP5.4 的有效语法了。 您只需将方法名称封装在大括号中即可阐明字符串组成。 演示
设置:
class USER // should be a StudlyCased class name
{
static function find_by_username($name)
{
printf('You tried to find a user by username "%s"', $name);
}
}
$array = array('USER', 'username', 'other', 'test');
没有
call_user_func_array()
的有效现代调用:
插值:
$array[0]::{"find_by_{$array[1]}"}($array[3]);
串联:
$array[0]::{'find_by_' . $array[1]}($array[3]);
输出:
You tried to find a user by username "test"
@Gumbo 的正确实现将一直工作到 PHP5.0。 演示
call_user_func_array(
array($array[0], 'find_by_' . $array[1]),
array($array[3])
);