Мне интересно, возможно ли это как-то?
пример кода
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».
Мне нужно задать имя локальной функции в виде строки и выполнить ее внутри класса.
Есть предложения?Заранее спасибо.