将本地用户定义的函数(自定义过滤器)作为参数传递给类方法?

时间:2012-02-28 09:26:32

标签: php class parameter-passing user-defined-functions

我想知道它有可能吗?

示例代码

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()执行它,但是在函数不可见的类中。是否有任何方法可以让用户定义的函数在类中工作?

这是什么意思?

使用类构造函数用户将配置数组传递给类。数组的一部分可能包含不同的过滤器参数,例如:

config array

$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检查参数”。

我需要将本地函数名设置为字符串并在类中执行。

有什么建议吗?提前谢谢。

2 个答案:

答案 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);
}