我想知道它有可能吗?
class CustomFilter {
...
function FilterData($data, $function_name) {
# here I want to execute that function against $data argument
}
...
}
function add2($x) {
return $x + 2;
}
$fd = new CustomFilter;
$fd->FilterData(5, ‘add2’);
我可以传递函数名并在类之外使用eval()执行它,但是在函数不可见的类中。是否有任何方法可以让用户定义的函数在类中工作?
这是什么意思?
使用类构造函数用户将配置数组传递给类。数组的一部分可能包含不同的过滤器参数,例如:
$cfg = array(
'image' => array(
'params' => array(
'+src' => 'string[filter:url]',
'maxwidth' => 'integer[filter:1+]',
'byte' => 'integer[filter:0-255]',
'alt' => 'string',
'align' => 'string[values:left|right|center]',
'binary' => false
),
...
),
...
);
过滤器参数定义某些输入字段的过滤条件。在此示例中,“string[filter:url]
”调用一些内部方法来检查参数“src”是否为有效url参数,“integer[filter:1+]
”检查值是否为大于1的整数,“false
”表示“不要过滤价值”。但是一个可能的值是'string[customfilter:myfunction]
',这意味着“用用户定义的函数myfunction检查参数”。
我需要将本地函数名设置为字符串并在类中执行。
有什么建议吗?提前谢谢。
答案 0 :(得分:2)
您可以这样称呼它:
$function_name($data);
在dataFilter
功能中。
示例:强>
class CustomFilter {
function FilterData($data, $function_name) {
$function_name($data);
}
}
function add2($x) {
echo $x + 2;
}
$fd = new CustomFilter;
$fd->FilterData(5, 'add2');
<强>结果:强>
7
答案 1 :(得分:2)
您可以使用call_user_func_array()
或call_user_func()
:
function FilterData($data, $function_name) {
call_user_func($function_name, $data);
}