create_function со значениями параметров по умолчанию? - PullRequest
2 голосов
/ 01 мая 2010

Хорошо, я пытаюсь использовать 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 ]

2 голосов
/ 01 мая 2010

Учитывая функцию, созданную с помощью 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 так же, как и для других функций: вам просто нужно поместить значение по умолчанию в список параметров.

После этого о том, как создать строку, содержащую параметры и их значения ... Полагаю, что существует пара конкатенаций строк, не забыв при этом избежать того, что должно быть экранировано.

0 голосов
/ 15 мая 2011

У меня та же проблема, я пытаюсь передать массив в созданную функцию обратного вызова ... Я думаю, я создам временную переменную ... Это ужасно, но мне лучше сделать, чем мучить себя слешами,мой код уже достаточно загадочный, как сейчас.

Итак, для иллюстрации:

global $tmp_someArray;
$tmp_someArray = $someArray;
$myCallback = create_function(
    '$arg1',
    '
          global $tmp_someArray;
          // do stuff with $tmp_someArray and $arg1....
          return($something);
    '
);
0 голосов
/ 01 мая 2010

Хотите создать анонимную функцию? 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
...