PHP-CPP是一个用于开发PHP扩展的C++库。PHP-CPP提供了一系列完善的文档、易于使用和扩展的类,让你能够相对快速的建立PHP的原生扩展。php
系列笔记:html
GCC版本不能过低,由于须要支持c++11特性。我使用的版本:ios
gcc version 7.2.0
若是你是CentOS的系统,可能GCC版本最高就是4.4.7,这时候只能经过手动编译从新安装了。c++
官方文档:http://www.php-cpp.com/documentation/git
PHP-CPP区分PHP5和7系列,可是对外提供的API是同样的。github
PHP5:算法
$ git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP-LEGACY.git
PHP7:编程
$ git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP.git
而后编译安装:数组
$ make $ sudo make install
能够先clone下面这个例子来尝鲜:异步
git clone https://github.com/elvisszhang/phpcpp_helloworld.git
进入helloworld源码目录,打开main.cpp,能够看到以下代码结构:
/** * User: 公众号: 飞鸿影的博客(fhyblog) * Date: 2018/7 */ #include <phpcpp.h> #include <iostream> //这是PHP里面能够调用的接口函数 void say_hello() { //输出一段欢迎文字 Php::out << "hello world from my first extension" << std::endl; } /** * 告诉编译器get_module是个纯C函数 */ extern "C" { /** * 本函数在PHP进程一打开就会被访问,并返回一个描述扩展信息的PHP结构指针 */ PHPCPP_EXPORT void *get_module() { // 必须是static类型,由于扩展对象须要在PHP进程内常驻内存 static Php::Extension extension("helloworld", "1.0.0"); //这里能够添加你要暴露给PHP调用的函数 extension.add<say_hello>("say_hello"); // 返回扩展对象指针 return extension; } }
PHP-CPP库定义了一个PHPCPP_EXPORT
宏,它应该放在get_module()
函数的前面。此宏确保get_module()
函数是公共导出的,所以可由PHP调用。宏具备基于编译器和操做系统的不一样实现。
编译这个扩展很简单,在终端命令行下输入make命令便可:
$ make g++ -Wall -c -O2 -std=c++11 -fpic -o main.o main.cpp g++ -shared -o helloworld.so main.o -lphpcpp $ sudo make install
编译完成会在源码目录下看到 helloworld.so 这个扩展文件。而后在php.ini文件添加扩展:
extension = helloworld.so
输入:
php -m | grep helloworld
就能够看到扩展。
测试源码目录下有个test.php,执行:
$ php test.php hello world from my first extension
(未完待续)
想第一时间获取最新动态,欢迎关注关注飞鸿影的博客(fhyblog)
,不按期为您呈现技术干货。