php内核-数据类型

结构体&联合体

在这里插入图片描述
结构体内每一个变量都独占一块内存,并保持内存对齐
在这里插入图片描述
联合体内所有变量公用同一块内存,占用内存大小为联合体中占用内存最大的变量的内存大小

zval

zval定义

每个变量的结构定义

struct _zval_struct {
    zend_value        value;            /* value 变量值*/
    union {
        struct {
            ZEND_ENDIAN_LOHI_3(
                zend_uchar    type,         /* active type 变量类型 */
                zend_uchar    type_flags,   /* 类型掩码,各类型会有几个不同的属性值,用于内存管理*/
                union {
                    uint16_t  call_info;    /* call info for EX(This) */
                    uint16_t  extra;        /* not further specified */
                } u)
        } v;
        uint32_t type_info;
    } u1;
    union {
        uint32_t     next;                 /* hash collision chain */
        uint32_t     cache_slot;           /* cache slot (for RECV_INIT) */
        uint32_t     opline_num;           /* opline number (for FAST_CALL) */
        uint32_t     lineno;               /* line number (for ast nodes) */
        uint32_t     num_args;             /* arguments number for EX(This) */
        uint32_t     fe_pos;               /* foreach position */
        uint32_t     fe_iter_idx;          /* foreach iterator index */
        uint32_t     access_flags;         /* class constant access flags */
        uint32_t     property_guard;       /* single property guard */
        uint32_t     constant_flags;       /* constant flags */
        uint32_t     extra;                /* not further specified */
    } u2;
};
  1. zend_value表示变量的值
  2. u1表示变量的类型
  3. u2用于辅助功能

zend_value定义

typedef union _zend_value {
    zend_long         lval;             /* 整型 */
    double            dval;             /* 浮点型 */
    zend_refcounted  *counted;          /* 获取不同类型结构的gc头部 */
    zend_string      *str;              /* 字符型 */
    zend_array       *arr;              /* array数组 */
    zend_object      *obj;              /* object对象 */
    zend_resource    *res;              /* resource类型 */
    zend_reference   *ref;              /* 引用类型 */
    zend_ast_ref     *ast;   
    zval             *zv;
    void             *ptr;
    zend_class_entry *ce;              /* 类 */
    zend_function    *func;            /* 方法 */
    struct {
        uint32_t w1;
        uint32_t w2;
    } ww;
} zend_value;

1. 整型

在一个x86_64的机器中,整型的定义typedef int64_t zend_long;
如果是32位的机器中,整型的定义typedef int32_t zend_long;

2. 浮点型

从定义可以看出,就是double类型

3. 字符串-string

字符串的基本定义为:

struct _zend_string {
    zend_refcounted_h gc;               /* 用于gc */
    zend_ulong        h;                /* hash value */
    size_t            len;              /* 字符串长度 */
    char              val[1];           /* 字符串的实际内容,默认数组为1 */
};

4. 数组-array

数组的基本定义

struct _zend_array {
    zend_refcounted_h gc;
    union {
        struct {
            ZEND_ENDIAN_LOHI_4(
                zend_uchar    flags,
                zend_uchar    _unused,
                zend_uchar    nIteratorsCount,
                zend_uchar    _unused2)
        } v;
        uint32_t flags;
    } u;
    uint32_t          nTableMask;
    Bucket           *arData;              /* 数组中实际存储的数据节点 */
    uint32_t          nNumUsed;            /* 数组中使用的个数 */
    uint32_t          nNumOfElements;      /* 数组中元素个数 */
    uint32_t          nTableSize;          /* 数组大小 */
    uint32_t          nInternalPointer;
    zend_long         nNextFreeElement;
    dtor_func_t       pDestructor;
};

Bucket结构,数组中的每个元素的实际存储结构

typedef struct _Bucket {
    zval              val;
    zend_ulong        h;                /* hash value (or numeric index)   */
    zend_string      *key;              /* string key or NULL for numerics */
} Bucket;

变量数据类型的表示(u1.v.type)

#define IS_UNDEF                    0
#define IS_NULL                     1
#define IS_FALSE                    2
#define IS_TRUE                     3
#define IS_LONG                     4
#define IS_DOUBLE                   5
#define IS_STRING                   6
#define IS_ARRAY                    7
#define IS_OBJECT                   8
#define IS_RESOURCE                 9
#define IS_REFERENCE                10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值