微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何定义基本的 php_internals 变量类型,如 sval、_zend_value、_zval_struct、zval_array,以便在 C 程序中使用它们?

如何解决如何定义基本的 php_internals 变量类型,如 sval、_zend_value、_zval_struct、zval_array,以便在 C 程序中使用它们?

如何在 C 中使用基本的 PHP_internal 结构。采用 zend_types.h 定义会产生错误“未知类型值”。显然,_zval_structzend_valuezval 一无所知; 如果我在 zend_value 之前定义 _zval_structzend_value 不知道 zval。 如何实施?

// PHP-src-master/Zend/zend_types.h

<..>

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  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;
};

<..>

typedef struct _zval_struct  zval;

<..>

typedef union _zend_value {
    zend_long         lval;             /* long value */
    double            dval;             /* double value */
    zend_refcounted  *counted;
    zend_string      *str;
    zend_array       *arr;
    //zend_object      *obj;
    //zend_resource    *res;
    //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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。