php单引号和双引号的区别

今天研究discuz源码的时候,根据default模板生成缓存模板中有这么一段代码:


$template = preg_replace("/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\}[\n\r\t]*/ies", "\$this->stripvtags('<? if(is_array(\\1)) foreach(\\1 as \\2) { ?>')", $template);
		$template = preg_replace("/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}[\n\r\t]*/ies", "\$this->stripvtags('<? if(is_array(\\1)) foreach(\\1 as \\2 => \\3) { ?>')", $template);
		$template = preg_replace("/\{\/loop\}/i", "<? } ?>", $template);

正则替换的第二项的双引号中有$this->stripvtags,实际上调用了当前类的方法stripvtags进行了运算。双引号里边的东西会调用php解释器呀,我了个大去。以前对此印象不是很深,特此加深印象。

单引号双引号区别如下:

一般情况下,建议都使用单引号,只有在这个字符串需要进行计算时才使用双引号。

比如:

$_POST['pwd']  与 $_POST["$pwd"],其区别在于 "$pwd" 需要进行计算后 以 $pwd 变量的值代替。 

而 $_POST['pwd'] 和 $_POST["pwd"] 从功能上看没有什么区别,主要的区别在于:执行效率,因为PHP对于双引号包含起来的字符串要进行扫描计算,单引号则不管内容如何都会原因输出而不会进行计算。

与 $_POST[pwd] 的区别在于:

PHP会对于没有用单引号或双引号包含起来的,首先会猜测这是个全局常量,而如果找不到会将之做为字符串,但通常不建议这样写,只有在某些场合会这么写,以下是示例:

$s = "param:$_POST[pwd]";   

而不能写成:

$s = "param:$_POST['pwd']";

此外,正则替换中还用到了捕获组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值