ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何在php中存储资源类型

2019-11-08 09:40:01  阅读:99  来源: 互联网

标签:c-3 php


如何在php中存储资源类型?它是内存中的字符串还是某种结构?
在文档中

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

它如何在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中工作的更多详细信息

标签:c-3,php
来源: https://codeday.me/bug/20191108/2007187.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有