php 资源类型保存,如何在php中存储资源类型

通过基本结构ZVAL实现PHP实现中的类型.

每种类型都是结构ZVAL(Zend值).

据我们所知

A resource is a special variable, holding a reference to an external

resource. Resources are created and used by special functions.

例如fopen返回类型resurce.

$fp = fopen('/proc/cpuinfo', 'r');

$fp-是资源类型,这意味着在php核心中已按结构创建了成分数据:

struct _zend_resource {

zend_refcounted_h gc;

int handle;

int type;

void *ptr;

};

其中zend_refcounted_h-我们类型的标头,它完成了内存管理并表示哈希;

handle是一个整数,引擎在内部使用该整数将资源定位到内部资源表中. php在创建资源过程中创建它.

该类型用于将相同类型的资源重新组合在一起.这意味着我们需要资源的调用析构函数,它有助于我们找到已注册的析构函数.

ptrit是我们的抽象数据.

阶段创建资源:

1.使用zend_register_list_destructors_ex()的注册析构函数.它需要清理垃圾收集器中的内存.

2.注册新资源zend_register_resource()并将指针附加到析构函数.这是返回zend_register_list_destructors_ex()的类型

完整的例子.

static void file_destructor(zend_resource *rsrc)

{

fclose((FILE *)rsrc->ptr);

}

type = zend_register_list_destructors_ex(

file_destructor, // pointer to destructor

NULL, // pointer to destructor for persistent resource, that non deleted after end request (example BD connection resource)

"file_resource", // name

module_number // PHP extension number

);

fp = fopen("/proc/cpuinfo", "r");

file_resource = zend_register_resource((void *)fp, type);

ZVAL_RES(&my_val, file_resource);

Resource types are just a way for the engine to mix different kind of

resources (of type “file”, “gzip” or even “mysql connection”) into the

same resource table.

有关资源类型,创建,删除和在phpinternalsbook中工作的更多详细信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值