首页 > 全部文章, 学习笔记 > php变量类型?内存指针?

php变量类型?内存指针?

2009年10月28日 发表评论 阅读评论

这个问题在C/C++语言中是个常见的问题,然而在php这种弱类型的语言中却并不被关注,个人觉得在php中探讨这个问题有点空中楼阁的感觉,因为php本身就是一种运行在Zend engine解释器基础上的一种语言,如果非要探讨这个问题,需要了解下php在zend引擎上的运行原理。
我们都知道C是强类型的语言,定义了的变量,在它的生命周期类就无法改变的,php这种弱类型的语言怎么能在C中完美运行呢?实际上php中的变量,在C中都是通过一个结构体来表示的,此结构体的定义是:

typedef struct _zval_struct {
zvalue_value value;
zend_uint refcount;
zend_uchar type;
zend_uchar is_ref;
} zval;

其中zvalue_value是真正保存数据的关键部分zvalue_value又是个联合体(union),结构如下

typedef union _zvalue_value {
long lval;
double dval;
struct {
char *val;
int len;
} str;
HashTable *ht;
zend_object_value obj;
} zvalue_value;

这个联合体中保存着一个弱类型的值常用的多种类型
zend engine根据 struct _zval_struct中的type来取union _zvalue_value中相应的单元,这就实现了php的多种类型间的自动转化。

总结,在php中探讨内存指针的问题没有意义,这应该是C/C++爱好者需要深入研究的问题!
深入内容参考 http://www.laruence.com/2008/08/22/412.html

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
click to change 看不清?点击换一张!