create_function с значениями параметров по умолчанию?
-
02-10-2019 - |
Вопрос
Хорошо, я ищу использовать 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
сделать то же самое, добавляя параметры и их значения по умолчанию?
Дело в том, что параметры исходят из текстового файла, а также сама функция. Итак, удивляетесь в лучший подход для этого использования create_function
и как именно строка должна быть проанализирована.
Спасибо :)
Решение
Учитывая функцию, созданную с 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);
'
);