PHP手册-eval()(可以将单引号中的变量解析)

今天在看一个程序的时候,发现程序中使用了eval函数,这个函数平时不怎么常见,但是听说它还是比较强大的一个php函数,就准备研究它下。
首先,去php手册查了下它的用法,手册上的解释是:把字符串按照 PHP 代码来计算。然后给出了下面的一个例子:

$string = 'cup';
 $name = 'coffee'; //定义两个变量
 $str = 'This is a $string with my $name in it.';
 echo $str. "\n"; //该指令会输出 This is a $string with my $name in it 
 eval("\$str = \"$str\";"); 
echo $str. "\n";//该指令会输出 This is a cup with my coffee in it.
eval()函数使用的时候需要注意两点,
(1)一定要中双引号,不要用单引号 如下面的代码

$string = 'cup'; 
$name = 'coffee'; //定义两个变量 
$str = 'This is a $string with my $name in it.'; 
eval(‘\$str = \’$str\‘;’); echo $str. "\n";
执行上面的代码会输出 This is a $string with my $name in it.并且还会得到错误的提示:Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING IN….. 究其原因主要是php认为双引号里面的东西需要去执行的,而单引号里面的东西php会直接输出的。
那么下面的代码能执行吗?

$string = 'cup';
 $name = 'coffee'; //定义两个变量 $str = 'This is a $string with my $name in it.'; 
eval("echo $str");
这个代码也是不能执行的,会提示:Parse error: syntax error, unexpected T_STRING, expecting ‘,’ or ‘;’ in….说明我们分号使用的有问题,那么怎么使用分号呢,这也是使用eval函数要注意的第二点
(2)该字符串必须是合法的 PHP 代码,且必须以分号结尾。
这句话不要理解错了,以分号结尾不要理解成$str中加一个分号就可以了,这个分号要加载eval函数执行体中,也就是要这样写

 $string = 'cup'; 
$name = 'coffee'; //定义两个变量 $str = 'This is a $string with my $name in it.';
 eval("echo\"$str\";\");
这样就能正常输出了。
最后还要说的是eval函数对于在数据库文本字段中供日后计算而进行的代码存储很有用。该问题日后会举例说明。
从eval函数的使用上我们也看到php对于单引号和双引号解析引擎的对待态度是不一样的,如果想详细了解,可以去

你可能感兴趣的:(PHP手册学习)