php什么叫资源型,PHP扩展开发之资源类型

您所在的位置:网站首页 什么叫php php什么叫资源型,PHP扩展开发之资源类型

php什么叫资源型,PHP扩展开发之资源类型

#php什么叫资源型,PHP扩展开发之资源类型| 来源: 网络整理| 查看: 265

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