PHP7扩展开发教程之Hello World实现方法示例

2019-05-01 05:02:09丽君

真正的逻辑代码都在这个文件中,后面会详细介绍。

三、编写代码

好了,到这一步我们终于要开始写代码了,打开hello.c文件。

整个扩展的入口是zend_module_entry这个结构,具体的定义可以在Zend目录下的zend_modules.h文件中看到,一共有十几个属性,快速跳过,我们暂时只需要"hello world"。

zend_module_entry hello_module_entry = {
  STANDARD_MODULE_HEADER,
  "hello",
  hello_functions,
  PHP_MINIT(hello),
  PHP_MSHUTDOWN(hello),
  PHP_RINIT(hello),    /* Replace with NULL if there's nothing to do at request start */
  PHP_RSHUTDOWN(hello),  /* Replace with NULL if there's nothing to do at request end */
  PHP_MINFO(hello),
  PHP_HELLO_VERSION,
  STANDARD_MODULE_PROPERTIES
};

STANDARD_MODULE_HEADER帮我们实现了前面6个属性

"hello"是扩展的名字

hello_functions是扩展包含的全部方法的集合

后面5个宏分别代表5个扩展特定方法

PHP_HELLO_VERSION是扩展的版本号,定义在头文件中

STANDARD_MODULE_PROPERTIES帮我们实现了剩下的属性

暂时都不需要修改,知道这是一个入口就行。顺着这个入口,我们继续看怎么给扩展添加方法,在hello_functions[]方法数组中已经有了一个示例方法confirm_hello_compiled,我们参考它写我们的方法hello_world

const zend_function_entry hello_functions[] = {
  PHP_FE(confirm_hello_compiled, NULL)    /* For testing, remove later. */
  PHP_FE(hello_world, NULL)
  PHP_FE_END /* Must be the last line in hello_functions[] */
};

先在扩展的方法数组中添加上hello_world,然后再定义hello_world。找到confirm_hello_compiled方法定义的地方,在它下面依葫芦画瓢,php_printf是Zend Engine中的printf方法。

PHP_FUNCTION(hello_world)
{
  php_printf("Hello World!n");
  RETURN_TRUE;
}

四、编译安装

最后就是编译安装我们的扩展了,安装过PHP扩展的同学不用看,没有经验的可以参考一下。

phpize

./configure
make
make install

现在PHP的扩展目录中已经有了hello.so这个文件,在php.ini中添加上扩展的配置

extension = hello.so

五、测试

写一个test.php方法,执行脚本就可以看到"Hello World!"

<?php
hello_world();

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP扩展开发教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》、《PHP网络编程技巧总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

相关文章 大家在看