Php — понимание create_function() — передача простой переменной

Впервые я пытаюсь использовать динамический create_function, и до сих пор без особого успеха :-)

Моя функция такова:

 function o99_brsa_custom_widgets() {
        global $wp_meta_boxes;
        global $o99_brsa_options;

        for($i=0; $i> count($o99_brsa_options[content]); $i++) {

            $widgt_id = 'o99_dashboard_widget_dyn' . $i;
            $widgt_name = 'obmek99 widget name' . $i;
            $out = $o99_brsa_options[content][$i];
            $f = create_function(' $out ',' global $out; echo $out;');
            do_the_widgets($widgt_id, $widgt_name, $f);
         }
    } 

Действие do_the_widgets() принимает только прямое эхо и печатает содержимое виджета.

$o99_brsa_options[content] — это проверенный массив из $i элементов (каждый из которых является содержимым).

Странно то, что $i работает на $widgt_id и $widgt_name, но на create_function() я получаю одно и то же значение, напечатанное во всех виджетах. ( echo $out )

Кажется, я не знаю, как передать простую переменную в новую функцию (я использую global внутри create_function(), но пока это мало помогает.

Итак, в чем моя ошибка/недоразумение/неправильное использование сейчас :-) ??


person Obmerk Kronen    schedule 06.05.2013    source источник
comment
Если $out будет глобальным, то что вы передаете в качестве аргумента?   -  person prodigitalson    schedule 06.05.2013
comment
Потому что каким-то образом, если я этого не сделаю, ничего не будет напечатано..   -  person Obmerk Kronen    schedule 06.05.2013
comment
Хорошо, если вы собираетесь использовать его как глобальный, тогда его значение уже будет настроено вне функции, а затем вы измените его внутри (или нет), и тогда эта модификация будет применяться глобально, а не только внутри. Если вам просто нужно передать аргумент, удалите файл global. Если вам нужно изменить имя аргумента, а затем изменить $out внутри функции. Пример: create_function('$arg', 'global $out; echo $out . $arg;');   -  person prodigitalson    schedule 06.05.2013


Ответы (1)


create_function было во время stone age , когда kaᵠ использовал ручку и бумагу писать приложения, когда ПиХаа埽 получил пиво, потому что написал hello would, мир стал лучше, пожалуйста, используйте closures

$f = function ($out) {
    echo $out;
};

$f("Welcome");

Вы бы поблагодарили меня однажды, но вы можете использовать create_function только в том случае, если вы Гордон (Машина из прошлого присланный сюда мучить нас) он написал это

$fn = create_function(
    '$x',
    'return $x; } $foo = 42; function foo($int) { return $int; '
);

Посмотреть живую демонстрацию

person Baba    schedule 06.05.2013
comment
:-) Я благодарю вас уже сейчас :-) . но что делать, если мне нужна поддержка PHP 5.2.9? - person Obmerk Kronen; 06.05.2013
comment
Знаете ли вы, сколько ошибок в PHP 5.2.9? Я думаю, вам следует немедленно обновить .... потому что, если вы заработаете, возникнет больше проблем. - person Baba; 06.05.2013
comment
Да сэр ! :-) Вы действительно правы. Спасибо за совет (я не знал о закрытии, я думаю, что инструменты важны для прогресса :-). И ваши ссылки очень классные (особенно 99 сортов пива) - person Obmerk Kronen; 06.05.2013
comment
Добро пожаловать... вот еще советы php.net/manual/en/functions. anonymous.php и stackoverflow.com/questions/2412299/ - person Baba; 06.05.2013
comment
в порядке. поэтому я думаю, мне нужно изменить заголовок с «понимание create_function ()» на Should I use create_function() ?? - тогда ответы будут намного короче. - person Obmerk Kronen; 06.05.2013
comment
Просто используйте анонимную функцию .. их очень легко понять .. я только добавил пример create_function, чтобы вы увидели, насколько это сложно - person Baba; 06.05.2013