1. 扩展和模块开发的意义
在PHP的开发中,我们经常会用到一些PHP自带的函数和类,但有时候这些自带的函数并不能满足我们的要求,这时候就需要我们自己去编写一些扩展和模块以满足我们的需求。这不仅能够提高我们的开发效率,还能让我们更好地了解PHP的底层实现原理。
2. 扩展和模块的区别
2.1 扩展
扩展是一种与PHP内核紧密结合的方式,可以直接调用PHP内核提供的函数和类。扩展的开发需要使用C语言编写,通常需要重新编译PHP,将扩展编译进PHP扩展库中,然后才能使用。常见的扩展有MySQL、PDO、Curl等。
扩展的优点:
与PHP内核紧密结合,性能高,速度快。
可以直接调用PHP内核提供的函数和类,方便使用。
可以扩展PHP的功能,满足复杂的需求。
以下是一个简单的扩展示例:
// Hello World扩展示例
#include <php.h>
static zend_function_entry hello_functions[] = {
PHP_FE(hello_world, NULL)
{NULL, NULL, NULL}
};
zend_module_entry hello_module_entry = {
STANDARD_MODULE_HEADER,
"hello",
hello_functions,
NULL,
NULL,
NULL,
NULL,
NULL,
"1.0",
STANDARD_MODULE_PROPERTIES
};
DECLARE_MODULE_GLOBALS(hello)
zend_module_entry *hello_module_ptr = &hello_module_entry;
PHP_MINIT_FUNCTION(hello)
{
return SUCCESS;
}
PHP_MSHUTDOWN_FUNCTION(hello)
{
return SUCCESS;
}
PHP_RINIT_FUNCTION(hello)
{
return SUCCESS;
}
PHP_RSHUTDOWN_FUNCTION(hello)
{
return SUCCESS;
}
PHP_FUNCTION(hello_world)
{
php_printf("Hello World");
}
ZEND_GET_MODULE(hello)
2.2 模块
相对于扩展来说,模块的开发要简单一些,可以使用PHP提供的接口进行开发,而不需要重新编译PHP。模块能够实现的功能相对简单,通常只是一些常用的功能相关的封装。模块的开发可以使用C语言、C++、PHP等语言进行编写。常见的模块有GD库、Session等。
模块的优点:
相对于扩展来说,开发难度低,上手较快。
可以使用PHP提供的接口进行开发,不需要重新编译PHP。
可以满足一些常用功能的需求。
以下是一个简单的模块示例:
// Hello World模块示例
function hello_world() {
echo "Hello World";
}
?>
3. 开发扩展和模块的步骤
开发扩展和模块的步骤基本相同,分为以下几个步骤:
编写代码,并定义需要暴露的函数或类。
编写config.m4文件,定义安装扩展或模块时需要执行的命令等配置信息。
使用PHP提供的工具进行编译和安装。
在PHP中使用扩展或模块。
以下是一个简单的开发扩展的步骤:
编写代码,定义需要暴露的函数:
PHP_FUNCTION(hello_world)
{
php_printf("Hello World");
}
编写config.m4文件:
PHP_ARG_ENABLE(hello, whether to enable hello support,
[ --enable-hello Enable hello support])
if test "$PHP_HELLO" != "no"; then
PHP_NEW_EXTENSION(hello, hello.c, $ext_shared)
fi
执行 ./configure 检查是否安装了扩展开发所需的各种库和工具,然后执行 make 和 make install 安装扩展。
$ ./configure --enable-hello
$ make
$ make install
在PHP代码中使用扩展:
hello_world();
?>