PHP弱数据类型的内部实现
PHP弱数据类型的内部实现
PHP那个该死的若类型是怎么实现的
打开php代码中Zend.h和Zend_types.h可以看到有如下定义:
view plain 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_t add_ref;zend_object_del_ref_t del_ref;zend_object_clone_obj_t clone_obj;/* individual object functions */ zend_object_read_property_t read_property;zend_object_write_property_t write_property;zend_object_read_dimension_t read_dimension;zend_object_write_dimension_t write_dimension;zend_object_get_property_ptr_ptr_t get_property_ptr_ptr;zend_object_get_t get;zend_object_set_t set;zend_object_has_property_t has_property;zend_object_unset_property_t unset_property;zend_object_has_dimension_t has_dimension;zend_object_unset_dimension_t unset_dimension;zend_object_get_properties_t get_properties;zend_object_get_method_t get_method;zend_object_call_method_t call_method;zend_object_get_constructor_t get_constructor;zend_object_get_class_entry_t get_class_entry;zend_object_get_class_name_t get_class_name;zend_object_compare_t compare_objects;zend_object_cast_t cast_object;zend_object_count_elements_t count_elements;zend_object_get_debug_info_t get_debug_info;zend_object_get_closure_t get_closure;
}这个结构体里面实现了:长整型,双精度浮点,字符串,hash表,还有对象(zend_object_value)。就是zval和pval两个结构。
| 上一篇:Redhat Linux下如何生成core dump文件 |
| 下一篇:Linux的用户和用户组管理 |