比如這樣一句PHP語句
eval("$a=1");
在運行時會出現這樣的錯誤
Notice: Undefined variable: a in D:\test.php on line 4Parse error: syntax error, unexpected '=', expecting end of file in D:\test.php(4) : eval()'d code on line 1PHP Notice: Undefined variable: a in D:\test.php on line 4PHP Parse error: syntax error, unexpected '=', expecting end of file in D:\test.php(4) : eval()'d code on line 1
這是怎麼回事?要如何解決?
回複內容:
比如這樣一句PHP語句eval("$a=1");
在運行時會出現這樣的錯誤
Notice: Undefined variable: a in D:\test.php on line 4Parse error: syntax error, unexpected '=', expecting end of file in D:\test.php(4) : eval()'d code on line 1PHP Notice: Undefined variable: a in D:\test.php on line 4PHP Parse error: syntax error, unexpected '=', expecting end of file in D:\test.php(4) : eval()'d code on line 1
這是怎麼回事?要如何解決?
這是因為雙引號裡的變數名被轉義了。
PHP允許我們在雙引號串中直接包含字串變數,雙引號串中的變數將被解釋而且替換,而單引號串中的內容總被認為是一般字元。例如:
$foo = 2; echo "foo is $foo"; // 列印結果: foo is 2 echo 'foo is $foo'; // 列印結果: foo is $foo echo "foo is $foo\n"; // 列印結果: foo is 2 (同時換行) echo 'foo is $foo\n'; // 列印結果: foo is $foo\n
因此字串"$a=1"中的$a並不會被識別為一個字串,而是被當成了一個變數,PHP會將則會將其解釋替換。但是$a又沒有被定義,所以會提示變數沒有定義。$a被替換後,就成了一個字面值,將一個數字賦給一個常量,當然會提示語法錯誤。
比較好的做法是將雙引號改成單引號eval("$a=1;");
,或者進行轉義eval("\$a=1;");
。
另外注意字串語句結尾的分號不要忘了,這也是錯誤的原因之一。
eval("\$a=1");
例子:
1
eval("$a=1");
改成 eval('$a=1;');