zoukankan      html  css  js  c++  java
  • PHP-CPP开发扩展(一)

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

    系列笔记:

    为什么使用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特性。我使用的版本:

    gcc version 7.2.0 
    

    如果你是CentOS的系统,可能GCC版本最高就是4.4.7,这时候只能通过手动编译重新安装了。

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

    安装PHP-CPP

    PHP-CPP区分PHP5和7系列,但是对外提供的API是一样的。

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

  • 相关阅读:
    nginx服务
    安装python
    软件包安装总结
    看内存大小
    计算机系统基础知识04
    计算机系统基础知识03
    计算机系统基础知识02
    计算机系统基础知识01
    python常用模块-logging模块
    python基础-包的使用
  • 原文地址:https://www.cnblogs.com/52fhy/p/9351808.html
Copyright © 2011-2022 走看看