PHP / Wordpress - передача переменных в create_function () - PullRequest
1 голос
/ 03 сентября 2010

Как передать переменную в create_function ()?

У меня есть что-то вроде этого:

function my_hook_function(){
  $var = 10;
  apply_filters('hook', $var);
  return $var;
}


$variable = 5;
$function = create_function('', 'return $variable;');

add_filter('hook', $function); 

echo my_hook_function();

но это не работает :( теоретически выход должен быть 5

add_filter () - это функция wordpress, которая позволяет вам менять вещи вокруг:)

Ответы [ 4 ]

3 голосов
/ 03 сентября 2010
$outsideVarName = 3434;
$function = create_function('$insideFunctionVarName', 'return $insideFunctionVarName;');
echo $function($outsideVarName);
3 голосов
/ 03 сентября 2010

Здесь есть две проблемы.Во-первых, вам нужно сообщить php, какие параметры передаются функции «create», или ссылаться на них как глобальные внутри тела.Во-вторых, вы ожидаете, что $ var будет изменен созданной функцией, но вы не передадите ей ссылку.Созданная функция просто возвращает новую переменную, и вы ничего не делаете с ней.

function my_hook_function(){
  $var = 10;
  $var = apply_filters('hook', $var);
  return $var;
}

/* This will return 5 by dividing the passed value by 2 and returning the result */
$function = create_function('$variable', 'return $variable/2;');    
add_filter('hook', $function);
echo my_hook_function();

/* This will return 5 by referencing the global $variable */
$variable = 5;
$function = create_function('', 'global $variable; return $variable;');
add_filter('hook', $function);
echo my_hook_function();

Обратите внимание, что если вы запустите этот код точно так же, как оба фильтров будут добавлены в хук 'hook'.

3 голосов
/ 03 сентября 2010

Чтение руководства для create_function использование для передачи $variable в функцию будет следующим:

$variable = 3434;
$function = create_function('$v', 'return $v;');

echo $function($variable); 

EDIT

Изменено $variable внутри вызова create_function, чтобы сделать его более понятным для правильного использования и избежать путаницы.

ОБНОВЛЕНИЕ

Учитывая комментарий ниже, вот обновленная версия:

$variable = 3434;
$function = create_function('$v', 'return $v;');

function myTest($function, $var) {
    echo $function($var);
}

myTest($function, $variable); // should echo 3434

Не уверен, что это то, что вы хотите, я будувоздержитесь от дальнейших предположений, пока не покажете фактический контекст, в котором вы работаете.

Обновление 2

Если вы проводите какое-либо исследование, есть ли причина, по которой вы не просто используете его втаким образом:

add_filter('something', create_function('$v', 'return $v;'));

Из того, что я мог найти, должно работать ...

1 голос
/ 24 мая 2012

Я думаю, что вы действительно хотите

$function = create_function('', "return $variable;");

или

$function = create_function('', 'return ' . $variable . ';');

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...