php源码笔记
php global
你global了一个变量,那么Zend就会去全局symbol_table去寻找,如果找不到,就会在全局symbol_table中分配相应的变量。
通过这样的机制,实现了全局变量。
单引号与双引号的区别
至于编译阶段,双引号和单引号的区别也是很大的, 我就举个数字来说明: 在scanning阶段, 对于双引号的词法规则有14条,而对于单引号,仅仅只有6条。
呵呵,是不是经过这样的分析,你会更清楚的了解到以后该怎么使用单引号和双引号了呢?
顺便说一句,对于不需要变量替换的纯字符串,大家都知道,因为在C/C++中,双引号才表示字符串,所以这种情况下,还是使用双引号的好。
参考文章:http://www.laruence.com/2008/08/19/338.html
使对象可以像数组一样进行foreach循环,要求属性必须是私有
使用implements Iterator
错误抑制符
其实使用@与
- $old = error_reporting(0);
- include(\’file\’);
- error_reporting($old);
参考文章
http://www.laruence.com/2009/07/27/1020.html
数组非数字键名引号的必要性
PHP会把没有引号引起来的键名当作是常量去获取, 当找不到的时候, 抛出一个NOTICE, 然后再根据”常量明”生成一个字符串, 然后再讲这个字符串做为键名继续~
明白了么? 数组中的非数字键的键名一定要有引号啊~
哦, 还记得有人会说, 那在字符串变量替换的时候, 写引号会导致错误,
恩, 标准写法:$string = “variable value is {$array[\’key\’]}”
php受locale影响的函数
字符串相关:
strtoupper | 转换大写 |
strtolower | 转换小写 |
ucfirst | 首字大写 |
sprintf | 其中一部分格式化有关 |
ctype_alpha | 检测是否全字母 |
ctype_alnum | 检测是否全数字 |
ctype_cntrl | 检测是否全控制字符 |
ctype_upper | 检测是否全大写 |
ctype_lower |
检测是否全小写 |
相关文章:http://www.laruence.com/2009/05/31/889.html
深入理解PHP数组遍历顺序
加元素的时候, 元素会插在相同Hash元素链的头部和线性列表的尾部. 也就是说, 元素在线性遍历的时候是根据插入的先后顺序来遍历的, 这个特殊的设计使得在PHP中,当使用数字索引时, 元素的先后顺序是由添加的顺序决定的,而不是索引顺序.
也就是说, PHP中遍历数组的顺序, 是和元素的添加先后相关的, 那么, 现在我们就很清楚的知道, 文章开头的问题的输出是:
参考文章:http://www.laruence.com/2009/08/23/1065.html
提升PHP性能之改变Zend引擎分发方式
可见, GOTO方式最快, SWITCH方式最慢.和官方的描述稍有不符.
GOTO方式比其默认的CALL方式, 性能提升还是比较明显的.
所以, 如果你希望让PHP发挥到机制, 改变Zend VM的分发方式, 也可以做为一个考虑因素.
Zend虚拟机在执行的时候, 对于编译生成的op_array中的每一条opline的opcode都会分发到相应的处理器(zend_vm_def.h定义)执行, 而按照分发的方式不同, 分发过程可以分为CALL, SWITCH, 和GOTO三种类型.
默认是CALL方式, 也就是所有的opcode处理器都定义为函数, 然后虚拟机调用. 这种方式是传统的方式, 也一般被认为是最稳定的方式.
SWITCH方式和GOTO方式则和其命名的意义相同, 分别通过switch和goto来分发opcode到对应的处理逻辑(段)
init_set在安全模式下不能启用
深入理解ob_flush和flush的区别
http://download.csdn.net/download/heqiang_/9765712 php调试技术手册
深入理解PHP原理之异常机制
注意PHP对字符串的递增运算
深入理解PHP内存管理之谁动了我的内存