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);
    '
);
Другие вопросы по тегам