php什么叫资源型,PHP扩展开发之资源类型 |
您所在的位置:网站首页 › 什么叫php › php什么叫资源型,PHP扩展开发之资源类型 |
php 什么叫资源型 ,PHP 扩展开发之资源类型 本章内容 本章主要介绍 php7 资源类型的使⽤,最终封装⼀个⾃⼰的⽂件操作函数。 什么是资源 resource 是 php 的⼀种特殊类型,经常⽤于标志各种抽象的东西,⽐如⽂件句柄,流…… 资源是怎么实现的? 资源在 php 中⽤ zend_resource 标识,其结构体如下: // Zend/zend_types.h struct _zend_resource { zend_refcounted_h gc; int handle; // TODO: may be removed int type; void *ptr; }; 其中 type 代表资源类型,区分不同的资源。ptr 指针是资源的实际类型,这个是最重要的,围绕资源的⼏乎所有操作都围绕这个字段展 开。 关于 zend_resource 的操作,都在 Zend/zend_list.c 中,包括资源的注册,资源的获取。 资源注册 要使⽤资源,必须先注册资源。注册资源使⽤ ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, const char *type_name, int module_number) 。第1个参数很重要,是资源的销毁函数,因为 php 语⾔属于⾼ 级语⾔,⽤户很可能在使⽤完资源后忘记释放,⽐如通过 fopen 打开的⽂件描述符,在 C 中,如果不调⽤ fclose 可能会造成严重的后 果,所以在 php 中我们必须考虑这点,通过注册资源的时候传递销毁函数,php 会在脚本结束⾃动帮我们释放资源;第2个参数⼀般传 NULL 就好;第3个就是资源类型名;第4个是模块的标志。 通常,我们需要在 php 的 MINIT 阶段调⽤资源注册函数。 ⽣成资源 ⽣成资源使⽤ ZEND_API zend_resource* zend_register_resource(void *rsrc_pointer, int rsrc_type) ,第1个参数就是资源的ptr, 实际使⽤到的内容,⽐如⼀般把 FILE *fp 放在这⾥;第2个参数是资源类型。 解析资源 fopen ⽣成资源后,⽤户再调 fwrite 的时候传⼊ $ch ,我们需要从 ch ⾥⾯解析出 FILE *fp ;解析资源使⽤的函数是 ZEND_API void *zend_fetch_resource(zend_resource *res, const char *resource_type_name, int resource_type) ,参数名称也都是字解释的。 Demo 接下来,我们⾃⼰实现两个函数 pure_open(filename,mode),pure_write(ch,content)。 // resource_demo.c // // Created by purelightme on 2020/8/25. // |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |