0

次のコードがコンパイルに失敗するのはなぜですか:

<?php
  $str = "echo \"ok\"";
  $func = "eval";
  $func ($str);
?>

そしてphpは、evalが定義されていないことを教えてくれます。

4

4 に答える 4

2

PHPでは、evalは「言語構造」であり、関数ではありません。(注意構文強調表示エディターではkeyword-colorに変わります。)言語構造は、可変関数構文を$func()使用して呼び出すことも、。などの他の関数固有のものと一緒に使用することもできませんis_callable()

http://www.php.net/manual/en/functions.variable-functions.phpから:

変数関数は、echo、print、unset()、isset()、empty()、include、requireなどの言語構造では機能しません。ラッパー関数を利用して、これらの構造のいずれかを変数関数として利用します。

于 2012-10-28T07:46:27.103 に答える
1

evalは関数ではなく、その言語構造であり、変数関数は言語構造では機能しません。

于 2012-10-28T07:43:54.420 に答える
1

eval()変数関数を使用して呼び出すことはできません。変数関数が何であるかを理解していない場合は? コードの次の部分を見てください

  $func = "eval";
  $func ($str); //Here $func becomes eval upon execution making it a variable function

マニュアル参照を見ると、明確に記載されています

注: これは関数ではなく言語構造であるため、変数関数を使用して呼び出すことはできません。

于 2012-10-28T07:51:24.370 に答える
-1

あなたは間違っている..コード、多分例のように..

<?php
    $eval_code =    '$my_name = "Swashata";' .
                    '$your_name = "John";' .
                    'return $your_name;' .
                    'echo $my_name;';
    $the_name = eval( $eval_code );
    echo '<p>$the_name has got a value ' . $the_name . '</p>';
?>
于 2012-10-28T07:50:54.730 に答える