0

のようなことをするとき

$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;

次のようなエラーが表示されます

解析エラー: 構文エラー、/my_path/my_file.php(107) の予期しない T_RETURN: 1 行目の eval() されたコード

なんで ?

4

2 に答える 2

4

This has nothing at all to do with eval.

Let's create the real 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 is a statement, not an expression, so you can't nest it into an expression which is what you're trying to do here. The conditional operator is not a one-line replacement for if/else.

To use the conditional operator properly:

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

which simplifies to just:

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

In your code, that looks like this:

$date = mktime();
$xxx = 'return (date("N",$date) == 1);';
$yyy = eval($xxx);
echo $yyy;
于 2013-02-10T22:14:33.670 に答える
3

私はそうあるべきだと確信しています

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

三項演算子によって生成されるものは、コマンドではなく値 (式) です。

于 2013-02-10T22:11:06.183 に答える