PHP-CPP 开发PHP扩展简单使用

PHP-CPP 安装

安装地址

github.com/CopernicaMarketingSoftw...

文档

www.php-cpp.com/documentation/intro...

选择PHP-CPP的理由

www.php-cpp.com/documentation/ten-r...

C++ PHP扩展代码写法

#include <phpcpp.h>
#include <iostream>

using namespace std;

Php::Value zimuge_hello(Php::Parameters &params)
{    
    Php::out << "测试01"<<std::endl;
     int max=0,sum = 0;
    max = params[0];
    for(int i=0;i<max;i++) {
        sum +=i;
    }
    return sum;
}

Php::Value zimuge_test(Php::Parameters &params)
{    
    Php::out << "测试02"<<std::endl;
     int max=0,sum = 0;
    max = params[0];
    for(int i=0;i<max;i++) {
        sum +=i;
    }
    return sum;
}

Php::Value zimuge_Div(Php::Parameters &params) {
    if(params[1] == 0) {
        throw Php::Exception("除数不能为0");
    }
    return params[0]/params[1];
}

Php::Value zimuge_getMax(Php::Parameters &params) {
    //调用外部函数写法
    return std::max(params[0],params[1]);
}


int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
   if (num1 > num2)
      result = num1;
   else
      result = num2;
   return result; 
}

extern "C" {
    PHPCPP_EXPORT void *get_module() 
    {
        static Php::Extension extension("zimuge", "1.0");
        extension.add<zimuge_hello>("zimuge_hello",{
            Php::ByVal("a",Php::Type::Numeric,true),
        });
        extension.add<zimuge_test>("zimuge_test",{
            Php::ByVal("a",Php::Type::Numeric,true),
        });
        extension.add<zimuge_Div>("zimuge_Div",{
            Php::ByVal("a",Php::Type::Numeric,true),
            Php::ByVal("b",Php::Type::Numeric,true),
        });
        extension.add<zimuge_getMax>("zimuge_getMax",{
            Php::ByVal("a",Php::Type::Numeric,true),
            Php::ByVal("b",Php::Type::Numeric,true),
        });
        return extension;
    }
}

编译&安装

※ 假如你的扩展名字是 xxxx
1. make clean & make
2. 修改 php.ini 
   extesnion=xxxx.so
3. php-fpm 重启  kill -USR2 pidxxx
4. php --ri xxxx or  php -m 
   确认扩展是否正确安装

PHP端使用方法

<?php
//FPM web端测试
echo  zimuge_hello(100)."<br/>";
echo  zimuge_test(1000)."<br/>";
echo  zimuge_Div(1000,33)."<br/>";
echo  zimuge_getMax(10,20)."<br/>";
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!