2009-11-20 3 views
0

Я пытаюсь выяснить, как функция eval() работает простым способом. Я пробовал следующий код, но он не работает, вместо этого появляется ошибка синтаксического анализа.Как работает функция eval в PHP?

<?php 
    $str = "exit()"; 
    eval($str); 
?> 

Что случилось с моим кодом?

+0

Как использовать функцию eval в PHP? Если вы можете это сделать: совсем нет. Я только наполовину шучу :) –

+0

Извините, вопрос был неправ: D Я не являюсь носителем английского языка, поэтому я делаю ошибки. – taabouzeid

+0

Нет, ваш вопрос был полностью о.к. и прекрасный английский. Я имел в виду тот факт, что eval() обычно рассматривается как плохая практика, и его следует избегать. –

ответ

4

нужна точка с запятой я думаю

<?php 
    $str = "exit();"; 
    eval($str); 
?> 

Из PHP документации:

Remember that the string passed must be valid PHP code, including things like terminating statements with a semicolon so the parser doesn't die on the line after the eval()

+0

Thanx много. Этот учебник http://www.tuxradar.com/practicalphp/4/4/0 просто немного смутил меня. – taabouzeid

2

Просто подсказка - eval'ed код вычисляется динамически и может уклониться от сборщика мусора.

+0

Это вряд ли самая большая проблема с eval. :) –

0

$str = "exit();"; может работать. eval() не следует использовать, за исключением случаев, когда это действительно необходимо.

Также попробуйте использовать функцию, отличную от exit(), или передать строку в качестве аргумента функции выхода. В противном случае вы не увидите вывод из него.

+0

Я просто пытался следовать этому учебнику http://www.tuxradar.com/practicalphp/4/4/0 Было упомянуто здесь без точки с запятой, поэтому я запутался. – taabouzeid

2

Является ли ошибка: "Parse error: syntax error, unexpected $end in Command line code(1)"? Если это так, это потому, что вы не положили точку с запятой в конце exit().

Так попробуйте:

<?php 
    $str = "exit();"; 
    eval($str); 
?> 

Надеется, что это помогает.

1

Она нуждается в точку с запятой в конце:

и проблема с Eval является то, что он вызывает анализатор с языка IL, таким образом, evalued код будет в VSL (очень медленный язык), так , если ваш сайт не пострадает от многих пользователей одновременно, то это не проблема, но если вы проецируете что-то большое, то я предлагаю вам не использовать eval, только в действительно необходимом случае.

надеюсь, что это поможет.
Joe