如何解决如何定义基本的 php_internals 变量类型,如 sval、_zend_value、_zval_struct、zval_array,以便在 C 程序中使用它们?
如何在 C 中使用基本的 PHP_internal 结构。采用 zend_types.h 定义会产生错误“未知类型值”。显然,_zval_struct
对 zend_value
或 zval
一无所知;
如果我在 zend_value
之前定义 _zval_struct
,zend_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 举报,一经查实,本站将立刻删除。