1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PHP扩展

PHP扩展 阮永雄 ruanyongxiong@ 概览 变量及数据类型 内存管理 函数的实现 类和面向对象 概览 变量及数据类型 内存管理 函数的实现 类和面向对象 开始阶段 模块初始化阶段(MINIT) 模块激活阶段(RINIT) 执行脚本阶段 结束阶段 停用模块阶段(RSHUTDOWN) 关闭模块(MSHUTDOWN) PHP生命周期 PHP_MINIT_FUNCTION(my_module) PHP_RINIT_FUNCTION(my_module) Execute PHP_RSHUTDOWN_FUNCTION(my_module) PHP_MSHUTDOWN_FUNCTION(my_module) 单进程SAPI周期 CLI 开始-请求开始-请求关闭-结束 PHP生命周期 多进程SAPI生命周期 Apache 多个请求 多线程SAPI生命周期 并行(请求开始, 请求结束) PHP生命周期 核心、基础设施 PHP语法实现 脚本编译执行 扩展机制 内存管理 …… Zend引擎 SAPI 服务器抽象层 _sapi_module_struct SAPI 需求 与外部库做交互(c/c++) 效率 优点 效率 减少PHP脚本的复杂度。 缺点 开发复杂 可维护性降低 开发周期长 PHP扩展 概览 变量及数据类型 内存管理 函数的实现 类和面向对象 变量及数据类型 弱类型语言 Zval - PHP弱类型的核心 同一种数据结构存储不同类型 不仅存储值,也存储类型 PHP的8种变量类型: 标量类型:boolean、integer、double、string 符合类型:array、object 特殊类型:resource、NULL 引用计数 C 语言如何实现PHP ZVAL 变量及数据类型 typedef struct _zval_struct { zvalue_value value; zend_uint refcount; zend_uchar type; zend_uchar is_ref; } zval; typedef union _zvalue_value { long lval; double dval; struct { char *val; int len; } str; HashTable *ht; zend_object_value obj; } zvalue_value; 类型常量 说明 IS_NULL 表示是一个空值 NULL; IS_LONG 是一个长整形(或整形)数; IS_DOUBLE 是一个双精度的浮点数; IS_STRING 是一个字符串; IS_ARRAY 是一个数组; IS_OBJECT 是一个对象; IS_BOOL 是一个布尔值; IS_RESOURCE 是一个资源; IS_CONSTANT 是一个常量; 字段 说明 lval 如果变量类型为 IS_LONG、IS_BOOLEAN 或 IS_RESOURCE 就用这个属性值。 dval 如果变量类型为 IS_DOUBLE 就用这个属性值。 str 如果变量类型为 IS_STRING就访问这个属性值。它的字段 len 表示这个字符串的长度,字段 val 则指向该字符串。 ht 如果变量类型为数组,那这个 ht 就指向数组的哈希表入口。 obj 如果变量类型为 IS_OBJECT就用这个属性值。 字段 说明 value 变量内容的联合。 type 变量的类型。。 is_ref 0 表示这个变量还不是一个引用。1 表示这个变量还有被别的变量所引用。 refcount 表示这个变量是否仍然有效。每增加一个对这个变量的引用,这个数值就增加 1。反之,每失去一个对这个变量的引用,该值就会减1。当引用计数减为0的时候,就说明已经不存在对这个变量的引用了,于是这个变量就会自动释放。 变量及数据类型 创建数据 MAKE_STD_ZVAL() 访问数据 xxx_P版本,用于访问zval* xxx_PP版本,用于访问zval** 转换数据 convert_to_*_ex(zvar**) convert_to*(zvar*) #define MAKE_STD_ZVAL(zv) \ ALLOC_ZVAL(zv); \ INIT_PZVAL(zv); 宏 展开 Z_LVAL(zval) (zval).value.lval Z_DVAL(zval) (zval).value.dval Z_STRVAL(zval) (zval).value.str.val Z_STRLEN(zval) (zval).value.str.len Z_ARRVAL(zval) (zval).value.ht Z_RESVAL(zval) (zval

文档评论(0)

cbf96793 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档