PHP-CPP开发扩展(一)

PHP-CPP是一个用于开发PHP扩展的C++库。PHP-CPP提供了一系列完善的文档、易于使用和扩展的类,让你能够相对快速的建立PHP的原生扩展。php

系列笔记:html

为何使用PHP-CPP

  • 很快
    用C++编写的代码很快:比用PHP编写的代码快得多。
  • 简单
    用C++编写的算法看起来几乎与用PHP编写的算法相同。若是你知道如何用PHP编程,你能够很容易地学习如何在C++中作一样的事情。实际上,PHP和大多数PHP函数名的语法都直接来自C和C++语法。
  • 无需Zend引擎知识
    Zend引擎的内部结构过于复杂,Zend引擎的代码很乱,并且大部分都没有记录。
  • 完善的文档
  • 支持全部重要的PHP功能
    使用PHP-CPP,你能够像使用普通的PHP脚本同样轻松地处理变量、数组、函数、对象、类、接口、异常和命名空间。除此以外,你还可使用C++的全部功能,包括线程,lambdas和异步编程。
  • 免费的
    PHP-CPP是一种开源技术,可供你无偿使用。

环境准备

GCC版本不能过低,由于须要支持c++11特性。我使用的版本:ios

gcc version 7.2.0

若是你是CentOS的系统,可能GCC版本最高就是4.4.7,这时候只能经过手动编译从新安装了。c++

官方文档:http://www.php-cpp.com/documentation/git

安装PHP-CPP

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

Hello World

能够先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),不按期为您呈现技术干货。

相关文章
相关标签/搜索