PHP弱数据类型的内部实现
来源:互联网 发布:我为什么离开华为 知乎 编辑:程序博客网 时间:2024/05/23 07:25
PHP那个该死的若类型是怎么实现的
打开php代码中Zend.h和Zend_types.h可以看到有如下定义:
typedef union _zvalue_value { long lval; /* 长整形 */ double dval; /* 双精度 */ struct { char *val; int len; } str;/*字符串*/ HashTable *ht; /*hash表 */ zend_object obj; /*PHP对象存储结构*/} zvalue_value;struct _zval_struct { zvalue_value value; /*值*/ zend_uchar type; /*当前类型*/ zend_uchar is_ref; /*。。。。。。。。。。。。。。看起来是是否被引用了*/ zend_ushort refcount; /*引用计数器*/};typedef struct _zval_struct zval;typedef zval pval;/*这玩意就是一个句柄表么*/typedef unsigned int zend_object_handle;typedef struct _zend_object_handlers zend_object_handlers;typedef struct _zend_object_value { zend_object_handle handle; zend_object_handlers *handlers;} zend_object_value;/*对象结构体*/struct _zend_object_handlers {/* general object functions */zend_object_add_ref_tadd_ref;zend_object_del_ref_tdel_ref;zend_object_clone_obj_tclone_obj;/* individual object functions */zend_object_read_property_tread_property;zend_object_write_property_twrite_property;zend_object_read_dimension_tread_dimension;zend_object_write_dimension_twrite_dimension;zend_object_get_property_ptr_ptr_tget_property_ptr_ptr;zend_object_get_tget;zend_object_set_tset;zend_object_has_property_thas_property;zend_object_unset_property_tunset_property;zend_object_has_dimension_thas_dimension;zend_object_unset_dimension_tunset_dimension;zend_object_get_properties_tget_properties;zend_object_get_method_tget_method;zend_object_call_method_tcall_method;zend_object_get_constructor_tget_constructor;zend_object_get_class_entry_tget_class_entry;zend_object_get_class_name_tget_class_name;zend_object_compare_tcompare_objects;zend_object_cast_tcast_object;zend_object_count_elements_tcount_elements;zend_object_get_debug_info_tget_debug_info;zend_object_get_closure_tget_closure;}
这个结构体里面实现了:长整型,双精度浮点,字符串,hash表,还有对象(zend_object_value)。就是zval和pval两个结构。
- PHP弱数据类型的内部实现
- Erlang数据类型的内部实现
- Erlang数据类型的内部实现
- PHP的数组内部实现
- PHP源码之数组的内部实现
- PHP源码之数组的内部实现
- PHP源码之数组的内部实现
- PHP的弱数据类型
- php变量内部实现
- PHP实现内部函数explode
- BackgroundWork的内部实现
- HASHTABLE的内部实现
- APC的内部实现
- StringBuilder的内部实现
- APC的内部实现
- itoa的内部实现
- PriorityQueue的内部实现
- vector的内部实现
- To the Max
- Django&&blog
- zookeeper学习记录
- Hibernate缓存
- jaxb2与xml之间相互转换
- PHP弱数据类型的内部实现
- Exponentiation
- js 优秀资源
- 我的2011之菜鸟的生活
- Android 4.0 源码 下 载
- Extra Krunch
- Linux用户、用户组和文件权限控制的学习
- concurrent
- Gone Fishing