2014
11-07
11-07
PHP内核探索 —— 变量概述:变量在PHP的内部如何实现
现代编程语言中的基本元素主要有:变量,流程控制接口,函数等等。我能否不使用变量来编写程序呢?这显然是可以的,例如:<?phpecho"HelloWorld";?>这个程序很简单,输出一个字符串内容。就和我们仅仅使用二进制也能编程一样,不使用变量也能完成大部分的工作,不使用变量我们的程序将丧失极大的灵活性,变量可以让我们将值存储起来,以便在程序的其他地方使用,或者通过计算保存新的值。变量具有三个基本特性:名称。变...
继续阅读 >
在PHP的Zend引擎中,有一个数据结构非常重要,它无处不在,是PHP数据存储的核心,各种常量、变量、函数、类、对象等都用它来组织,这个数据结构就是HashTable。HashTable在通常的数据结构教材中也称作散列表,哈希表。其基本原理比较简单(如果你对其不熟悉,请查阅随便一本数据结构教材或在网上搜索),但PHP的实现有其独特的地方。理解了HashTable的数据存储结构,对我们分析PHP的源代码,特别是ZendEngine中的虚拟机的实现时...
最近哈希表碰撞攻击(HashtablecollisionsasDOSattack)的话题不断被提起,各种语言纷纷中招。本文结合PHP内核源码,聊一聊这种攻击的原理及实现。哈希表碰撞攻击的基本原理哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表。PHP中的哈希表是一种极为重要的数据结构,不但用于表示Array数据类型,还在Zend虚拟机内部用于存储上下文环境信息(执行上下文的变量及函数均使用哈希表结构存储)。理想情况下...
现在我们已经可以从符号表中获取用户在PHP语言里定义的变量了,是该做点其它事的时候了,举个比例,比如给它来个类型转换。想想C语言中的类型转换细则,你的头是不是已经大了?但是变量的类型转换就是如此重要,如果没有,那我们的代码就会是下面这样了:voiddisplay_zval(zval*value){switch(Z_TYPE_P(value)){caseIS_NULL:/*如果是NULL,则不输出任何东西*/break;caseIS_...