- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 新疆某铜矿选矿工艺流程研究.pdf VIP
- 2025年部编人教版五年级《道德与法治》上册教案(全册) .pdf VIP
- 1989年高考语文试题全国卷.docx VIP
- 心脏MR临床应用.pptx
- 2025中级消防设施操作员作业考试题及答案(1000题).doc
- 摩登家庭台词剧本第一季第一集中英双语左右对照.pdf VIP
- 2018年钢铁-环保技术培训.pdf VIP
- 高中英语人教版选择性必修第一册词汇表单词英译汉默写.docx VIP
- 第三课 我国的经济发展 课件-2025年高考政治一轮复习必修二《经济与社会》.ppt.pptx VIP
- 附件2广东电网有限责任公司配电网规划技术指导原则.pdf VIP
文档评论(0)