引号 - 关于php eval( )函数 和 实际代码执行的 结果不一致
大家讲道理
大家讲道理 2017-04-11 09:09:03
[PHP讨论组]
eval()

在php中这个eval()函数是将字符串作为代码来执行
于是下面这段代码

<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
$str = "$str";
echo $str. "\n";

输出为
This is a $string with my $name in it. This is a cup with my coffee in it.

那么现在我用实际代码代替eval()函数

<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
$str = "$str";
echo $str. "\n";

这输出为
This is a $string with my $name in it. This is a $string with my $name in it.

其实我知道单引号的不解析变量,我只是不明白为什么使用eval()函数的时候单引号中的变量被解析了!是因为在$str外加了双引号吗?如果是,那么在不使用eval函数的时候直接加双引号却不行呢!请问这个问题是出在哪里?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
PHP中文网

$str = 'This is a $string with my $name in it.';单引号不解析变量

天蓬老师

eval的时候,This is a $string with my $name in it.当做一条表达式, ""内的$var自然会被当做变量处理;
如果下面的那种情况改成

$str = "This is a $string with my $name in it.";
echo $str. "\n";

输出也就一致了。
至于你后面的$str = "$str"; 这里只是普通的赋值。

PHP中文网

双引号内的变量解析不能“递归”

阿神

教你一招:双引号+花括号

$string = 'cup';
$name = 'coffee';
$str = "This is a {$string} with my {$name} in it.";
echo $str;

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号