高手请无视本文,骨灰们请直接绕行... :-) |
本文旨在对网上流传很广的部份初/中级PHP开发工程师面试题目做出一些解答.并对这些面试题对面试者的测试意义,以及题目本身做一些较为深入的分析.
也许大量的初/中级PHPer们在面试的时候已经发现,许多公司的面试题目其实基本类似.:-),或许出题者本身并不清楚这些题目究竟要考验应聘者哪方面的知识.(反正天下面试题一大抄).也有PHPer们认为这些面试题千篇一律,而且很没有意思,并不能看出应试者真实水平,时常抱怨:"单引号和双引号有什么区别,这种题目有什么意思吗?我只需要把东西做出来就OK了.",那么这些题目的背后究竟隐藏着什么样的细节呢?在这篇文章里,将做一些分析.
题目一: 双引号和单引号的区别在哪里?
按照官方手册的说法,"单引号字符串中出现的变量和转义序列不会被变量的值替代".按这样的描述.单引号和双引号的区别无非就在于 变量 和 转义序列两方面.
从 变量 方面来讲. 当用双引号或者定界符指定字符串时,其中的变量会被解析。比如以下例子
<?php
$v_char='test';
echo "$v_char";
?>
结果会输出 test
而如果是 echo '$v_char'; 时 ,会原样输出 $v_char
而转义符方面,如果是 echo "test/nnextline"; 则显示结果为
test
nextline
如果是单引号,则会原样显示 test/nnextline ,其中的/n并不会做为换行转义.
由此可以推导出的答案就是,一般来讲,单引号界定字符,要比双引号略微快.
如果更进一步研究到编译层面,在scanning阶段针对双引号的词法规则处理的确比单引号要多近一倍,
而在opcodes层面,我们来看一段代码:
<?php
$show_value = 123;
echo 'sing_quote'.$show_value;
echo "double_quote{$show_value}";
?