Как создать PHP-цикл eval? - PullRequest
       22

Как создать PHP-цикл eval?

0 голосов
/ 30 января 2010

код, который я использую:

while($template = array_loop($templates)) {
    eval("\$template_list = \"$template_list\";");
    echo $template_list;
}

Похоже, что он определил, сколько шаблонов было успешно, но он показывает одно и то же имя для них всех:

Имя: LayoutName: LayoutName: LayoutName: LayoutName: LayoutName: LayoutName: Layout

Как сделать так, чтобы отображалось название каждого шаблона? (Примечание: echo - это просто тестовая функция, фактическая вызывается в другом шаблоне eval'd)

Ответы [ 5 ]

3 голосов
/ 30 января 2010
eval("\$template_list = \"$template_list\";");

Эта строка кода просто каждый раз устанавливает $template_list на себя. Это никогда не изменится. Возможно, вы хотели что-то вроде

eval("\$template_list = \"$template\";")

Обратите внимание, что вам даже не нужен eval для этого, вы можете просто использовать $template_list = $template; обычно.

2 голосов
/ 31 января 2010

Такой метод оценки потенциально довольно опасен, я попытаюсь объяснить, почему.

Если у вас был шаблон с именем "; exit (); //" (я думаю - что-то в этом роде), ваш сценарий мог бы быть завершен в середине потока. Теперь, если у вас был шаблон с похожим именем, но вы использовали 'unlink (' filename ')' или еще хуже: 'exec ("rm -rf /");' Вы могли бы быть в некотором беспорядке.

так что да, вам действительно не нужно использовать eval и следует избегать его везде, где это возможно.

надеюсь, что это может помочь:)

1 голос
/ 31 января 2010

а как же:

$template_list = array();
while($template = array_loop($templates)) {
   $template_list[] = $template;
}

// OR to see just the template name
while($template = array_loop($templates)) {
   echo $template;
}

Тогда вы можете работать с массивом, полным шаблонов.

Кстати, я узнал, что Эвал - это зло ...

edit: ок, я думаю, вы просто ищете название шаблона. Имя должно быть внутри $ template.

1 голос
/ 30 января 2010

Может быть:

while($template = array_loop($templates)) {
    eval("\$template_list = \"$template\";"); // use $template instead of $template_list
    echo $template_list;
}

Хотя я читал ваше мнение относительно eval, но

$template_list = $template;

здесь должно работать более эффективно.

0 голосов
/ 31 января 2010

Мне удалось это сделать ...

С этим кодом:

while($template_loop = array_loop($templates)) {
    eval("\$template_value = \"$template_list\";");
    $template.= $template_value;
}
...