2013-02-10 2 views
0

, делая что-то вродеEval ошибка при использовании «если» короткая форма

$date = mktime(); 
$xxx = 'if (date("N",$date) == 1) { return TRUE; } else { return FALSE; }'; 
$yyy = eval($xxx); 
echo $yyy; 

он работает.

Но когда делать что-то вроде

$date = mktime(); 
$xxx = '(date("N",$date) == 1 ? return TRUE : return FALSE);'; 
$yyy = eval($xxx); 
echo $yyy; 

Я получаю сообщение об ошибке, как

Parse error: syntax error, unexpected T_RETURN in /my_path/my_file.php(107) : eval()'d code on line 1

Почему?

ответ

3

Я почти уверен, что должно быть

$xxx = 'return (date("N",$date) == 1 ? TRUE : FALSE);'; 

Вещей, порожденными тройным оператором является значение (выражения), а не команд.

+0

Спасибо, иногда я делаю не вижу леса из-за всех деревьев ;-) – user2037828

4

Это не имеет ничего общего с eval.

Давайте создадим реальный TestCase:

<?php 
function foo() 
{ 
    $date = mktime(); 
    (date("N",$date) == 1 ? return TRUE : return FALSE); 
} 

foo(); 
?> 

Output:

Parse error: syntax error, unexpected T_RETURN on line 5 

return является утверждение, а не выражение, так что вы можете не гнездо его в выражение, которое является то, что вы пытаетесь сделать здесь. Условный оператор не является однострочной заменой для if/else.

Чтобы использовать условный оператор правильно:

return (date("N",$date) == 1 ? TRUE : FALSE); 

упрощающий просто:

return (date("N",$date) == 1); 

В вашем коде, который выглядит следующим образом:

$date = mktime(); 
$xxx = 'return (date("N",$date) == 1);'; 
$yyy = eval($xxx); 
echo $yyy; 
+0

woah, clear. Большое спасибо. – user2037828