PHP弱数据类型的内部实现
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两个结构。
页:
[1]