create_function со значениями параметров по умолчанию?
Хорошо, я смотрю на использование create_function
для того, что мне нужно сделать, и я не вижу способа определить значения параметров по умолчанию с ним. Это возможно? Если это так, то какой будет наилучшим подходом для ввода параметров в create_function
функция в php? Возможно используя addslashes
?
Ну, например, у меня есть такая функция:
function testing($param1 = 'blah', $param2 = array())
{
if($param1 == 'blah')
return $param1;
else
{
$notblah = '';
if (count($param2) >= 1)
{
foreach($param2 as $param)
$notblah .= $param;
return $notblah;
}
else
return 'empty';
}
}
Хорошо, так как бы я использовал create_function
сделать то же самое, добавив параметры и их значения по умолчанию?
Дело в том, что параметры берутся из файла TEXT, а также самой функции. Итак, задаюсь вопросом о наилучшем подходе для этого с помощью create_function
и как именно строка должна быть проанализирована.
Спасибо:)
3 ответа
Учитывая функцию, созданную с create_function
сюда:
$func = create_function('$who', 'echo "Hello, $who!";');
Вы можете назвать это так:
$func('World');
И вы получите:
Hello, World!
Теперь, имея значение по умолчанию для параметра, код может выглядеть так:
$func = create_function('$who="World"', 'echo "Hello, $who!";');
Примечание: я только добавил значение по умолчанию для параметра в первом аргументе, переданном функции create_function.
И затем, вызывая новую функцию:
$func();
Я все еще получаю:
Hello, World!
т.е. значение по умолчанию для параметра было использовано.
Итак, значения по умолчанию для параметров работают с create_function
точно так же, как и для других функций: вам просто нужно поместить значение по умолчанию в список параметров.
После этого о том, как создать строку, содержащую параметры и их значения... Полагаю, что существует пара конкатенаций строк, не забыв при этом избежать того, что должно быть экранировано.
Вы хотите создать анонимную функцию? create_function
используется для создания анонимных функций. В противном случае вам нужно создать функцию, как правило:
function name($parms)
{
// your code here
}
Если вы хотите использовать create_function
Вот прототип:
$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2, M_E) . "\n";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
У меня та же проблема: я пытаюсь передать массив в созданную функцию обратного вызова... Я думаю, что создам временную переменную... Это ужасно, но мне лучше сделать, чем мучить себя слешами, мой код уже достаточно загадочно, как сейчас.
Итак, для иллюстрации:
global $tmp_someArray;
$tmp_someArray = $someArray;
$myCallback = create_function(
'$arg1',
'
global $tmp_someArray;
// do stuff with $tmp_someArray and $arg1....
return($something);
'
);