create_function с значениями параметров по умолчанию?

StackOverflow https://stackoverflow.com/questions/2749334

  •  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);
    '
);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top