阜和教育
        CCNA培训
        CCNP培训
        CCIE直通车培训
        CCIP培训
        CCVP培训
        CCSP培训
        CCIE集中营培训
        windows server 2008培训
        Windows 7培训
        SQL Server 2008培训
        Windows Server 2003培训
        RHCSA培训
        RHCE培训
        RHCVA培训
        RHCDS培训
        RHCSS培训
        RHCA培训
        JBCAA培训
        JBCD培训
        OCA 认证专员培训
        Oracle 10g OCP培训
        Oracle 10g OCM培训
        H3CNA培训
        H3CNE培训
        H3CSE培训
        H3CTE培训
        H3CIE Routing&Switching培训
        BIG-IP培训
        Firepass培训
        ARX培训
        ITIL V3 Foundation培训
        ITIL V3 Capability培训
        ITIL V3 Lifecycle培训
        ITIL V3 Expert培训
        PMP培训
        Junos初级专员培训
        电信运营商科目SP培训
        Junos(SEC)培训
        E系列认证培训
        防火墙VPN认证培训
        入侵检测与防御IDP培训
        SSL认证培训
        WX认证培训
        统一接入控制UAC培训
        企业路由和交换培训
        VCP培训
        VCAP-DCA培训
        VCAP-DCD培训
        VCA-DT培训
        VCP-DT培训
        业务连续性/灾难恢复培训
        存储技师EMCST培训
        存储管理员EMCSA培训
        应用开发EMCApD培训
        系统管理员EMCSysA培训
        产品特定技术培训
    阜和教育-首页> RedHat > PHP弱数据类型的内部实现
跳过导航链接

PHP弱数据类型的内部实现

2011-12-27 14:40:00
文章摘要: PHP弱数据类型的内部实现 PHP那个该死的若类型是怎么实现的   打开php代码中Zend.h和Zend_types.h可以看到有如下定义:   viewplaintypedefunion_zvalue_value{longlval;/*长整形*/do...

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的用户和用户组管理
文章摘要: Linux的用户和用户组管理 1.Linux的用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。 1.1.Linux系统用户账号的管理 添加账号: useradd选项用...