2016-09-05 2 views
-3

У меня есть пример кода:Ошибка при использовании Eval в PHP

$messages = array(
    array("mark" => "0 < {m} < 4.9", "message" => "BAD"), 
    array("mark" => "5 < {m} < 10", "message" => "GOOD"), 
); 
$m = 3; 
$message = ""; 
foreach ($messages as $row) { 
    $condition = $row['mark']; 
    $condition = str_replace('{m}', $m, $condition); 
    $str = "$result = (bool)".$condition; 
    eval($str); 
    if($result) $message = $row['message']; 
} 
echo $message; 

Результат плоха, но она показывает ошибку: Parse error: syntax error, unexpected '='. Как идеи?

+1

'$ ул = "$ результата = (Ий)" $ condition; 'PHP попытается вставить текущее значение' $ result' в вашу строку, а не рассматривать его как часть кода, который вы хотите eval .... '$ str =" \ $ result = (bool) ". $ condition; 'заставит буквальный' $ 'в строке кода –

+0

Сравните ваш код с примерами в руководстве об eval(), я уверен, вы его увидите. – Rizier123

+4

Почему 'eval' в любом случае? Это действительно не нужно, или это упражнение по кодированию? – Yoshi

ответ

1

Проверьте код, кроме двойных кавычек: выражение 0 < 3 < 4.9 не является допустимым условием в PHP, так что вы должны изменить его:.

$messages = array(
    array("mark" => "0 < {m} && {m} < 4.9;", "message" => "BAD"), 
    array("mark" => "5 < {m} && {m} < 10;", "message" => "GOOD"), 
); 
$m = 3; 
$message = ""; 
foreach ($messages as $row) { 
    $condition = $row['mark']; 
    $condition = str_replace('{m}', $m, $condition); 
    $str = '$result = (bool)'.$condition; 
    eval($str); 
    if($result) $message = $row['message']; 
} 
echo $message; //output: BAD