当前位置: 首页 > news >正文

洋气的传媒公司名字平原县网站seo优化排名

洋气的传媒公司名字,平原县网站seo优化排名,ubuntu怎么做网站,dw个人简历网页制作模板zendAPI 项目不提供任何底层的功能,只是封装了 zend engine 提供的功能,对上提供一个易用的编程接口。这篇文章中,我们将介绍 C 世界与 C 世界交汇的地方,在这里也是 zendAPI 的接口与 zend engine 进行整合的地方,非常…

zendAPI 项目不提供任何底层的功能,只是封装了 zend engine 提供的功能,对上提供一个易用的编程接口。这篇文章中,我们将介绍 C++ 世界与 C 世界交汇的地方,在这里也是 zendAPI 的接口与 zend engine 进行整合的地方,非常重要。
每一个 PHP 扩展必须有一个描述对象,在 zendAPI 中我们 zapi::lang::Extension 类主要的作用主要完成这个功能。现在我们来看一个最简单的 zendAPI 项目的入口文件长什么样子:

#include "zapi/ZendApi.h"extern "C" {ZAPI_DECL_EXPORT void *get_module() 
{static zapi::lang::Extension hellozapi("hellozapi", "1.0");return hellozapi;
}}

怎么样很简单吧,一个空的 PHP 扩展就完成了,现在我们就详细解释下每行的作用。

#include "zapi/ZendApi.h"

在开发基于 zendAPI 的项目时候,我们只需要包含这个头文件就可以了,在这个头文件中,我们会引入 zendAPI 日常开发需要的必要的头文件,您不用自己一个一个自己去引入。

extern "C"
{}

CPP 代码与 C 代码进行连接的时候我们一般会加上 extern wrapper, 因为如果不加的话 CPP 编译器会对函数名称进行 name mangling,这个会导致连接的时候提示符号不存在的错误。

ZAPI_DECL_EXPORT void *get_module();

ZAPI_DECL_EXPORT 表示我们扩展导出符号 get_module 给其他库使用。函数 get_module 这个函数非常重要,他是 zendAPIzend engine 进行集成的入口,我们必须在这个函数中设置好我们扩展的一切,然后将扩展描述对象的指针返回。
在这里我先简单描述下 PHP 加载扩展这部分的过程:
PHP 初始化的过程中调用的函数有:(这里我们以 cli SAPI 为例进行说明)

  1. php_cli_startup
  2. php_module_startup
  3. php_ini_register_extensions
  4. php_load_extension
  5. get_module = (zend_module_entry ()(void)) DL_FETCH_SYMBOL(handle, "_get_module");
  6. 调用 get_module,获取zend_module_entry 对象指针

简单来说我们可以这样理解,在 PHP 模块初始化的时候,PHP 会去读取我们在 php.ini 文件中注册的扩展, 比如咱们的 hellozapi 就在 php.ini 注册了一行 extension=hellozapi.so。如果相关的扩展文件存在,PHP 使用 dlopen 平台接口进行动态加载,成功的话, 获取 _get_module 符号,然后进行调用,最终获取一个 zend_module_entry 指针。

static zapi::lang::Extension hellozapi("hellozapi", "1.0");

这行代码实例化一个扩展对象,第一个参数是咱们的扩展的名称,一般需要跟在 CMake 脚本中定义的项目名字保持一致,第二个参数指定扩展的版本号,这里我们定义为 1.0,这些信息我们都可以在 PHP 脚本中通过反射技术获取同时也会出现在 phpinfo() 函数的输出中。
特别提醒:这里的 static 关键字不能去掉,去掉了我们就返回了一个悬空指针。(dangle pointer)

return hellozapi;

新手可能会有疑问,我们的 get_module 明明是返回一个 void *,而我们这里返回 zapi::lang::Extension 对象怎么也可以啊 ?原理很简单,因为我们的 zapi::lang::Extension 定义了一个转换运算符,C++ 编译器会自动进行类型转换。

到这里,我们这个空的 PHP 扩展就完成了,怎么样,简单吧?休息一下我们继续。

文章使用的编程文档的引用连接

ZAPI_DECL_EXPORT 参考手册
zapi::lang::Extension 参考手册

原文链接: C++ 开发 PHP 7 扩展之模块入口定义

http://www.lbrq.cn/news/2460979.html

相关文章:

  • 巩义网站建设价格超级推荐的关键词怎么优化
  • 石家庄专门做网站的公司无锡网站建设
  • 湖南智能网站建设哪里好免费推广引流软件
  • 龙岗中心城网站建设优秀网站设计欣赏
  • 广告设计一般人能学吗哈尔滨seo关键字优化
  • html5在网站建设中的关键词优化哪个好
  • 怎么做微信小说网站中小企业网站优化
  • 牙科网站模板seo专业技术培训
  • 新手做网站做那个中国营销传播网
  • 什么网站可以做英语题注册网站平台
  • 为赌博网站做代理怎么样才可以在百度上打广告
  • 动态网站标题怎么做搜索引擎营销sem
  • 河东做网站的公司电商代运营公司
  • 网页制作与网站建设pdf苏州网站制作
  • 电商网站后台功能bt兔子磁力搜索
  • 网络下载的网站模板能直接上传到虚拟主机百度影响力排名顺序
  • 做网站销售的宁波seo服务推广
  • 做百度百科的网站企业营销策略
  • qq小程序权限设置深圳百度快照优化
  • 教育网站解决方案宁德市旅游景点大全
  • 哪个网站可以学做包子seo快速排名软件首页
  • 张艺兴粉丝做的网站seo网络推广技术员招聘
  • 江门市建设银行网站情感营销经典案例
  • 住房城乡建设网站查询宜兴百度推广公司
  • 铭万做的网站怎么样百度推广服务
  • 山东青岛网站建设公司网络舆情分析
  • 网站备案代理广州抖音推广
  • win2008iis7配置网站企业查询信息平台
  • 装饰设计软件湖北seo服务
  • 装饰网站建设的方案ppt谈谈自己对市场营销的理解
  • 口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
  • Java程序员学从0学AI(六)
  • Transformer:颠覆NLP的自注意力革命
  • MongoDB数据模型
  • Linux选择题
  • 【C++基础】指针常量 | 常量指针 | int* p | const int* p | int* const p| const int* const p