当前位置: 首页 > 后端技术 > PHP

PHP扩展开发教程4——开发自己的接口类

时间:2023-03-29 14:37:28 PHP

PHP扩展是高级PHP程序员必须掌握的技能之一。对于一个刚刚入门的PHP扩展开发者来说,如何才能开发出成熟的扩展,进入PHP开发的高级领域呢?本系列开发教程将带您从初级到高级。本教程系列在linux下开发(推荐centos),php版本使用5.6,假设你有一定的linux操作经验和c/c++基础。如果大家有什么问题需要交流,欢迎加入QQ技术交流群32550793与我交流。上一章演示了如何在PHP扩展中导出常用函数,本章介绍如何在扩展中导出类。使PHP能够在脚本中直接访问扩展中的C++类。1、如何在PHP扩展中导出C++类下面是一个使用PHP-CPP开发的扩展骨架代码,编译后可以导出一个demoC++类。项目源码见github,可以使用git客户端下载或者打开网址打包下载。#gitclonehttps://github.com/elvisszhang/phpcpp_counter.git现在我们的类名是Counter,扩展中注册类的语法是这样的Php::Classcounter("Counter");Counter类有一个名为increment的函数,下面的语法告诉扩展允许PHP脚本访问这个函数。counter.method<&Counter::increment>("increment");main.cpp的C++源码如下。#include#include//扩展导出类CounterclassCounter:publicPhp::Base{private:int_value=0;公共:计数器()=默认值;虚拟~Counter()=默认值;//类的普通成员函数Php::Valueincrement(){return++_value;}Php::Valuedecrement(){return--_value;}Php::Valuevalue()const{return_value;}//类的静态成员函数staticPhp::Valuegettime(){returntime();}};//告诉编译器get_module是一个纯C函数extern"C"{//get_module是一个扩展入口函数PHPCPP_EXPORTvoid*get_module(){staticPhp::ExtensionmyExtension("counter","1.0.0");//初始化导出类Php::Classcounter("Counter");//注册导出类的可访问类Functioncounter.method<&Counter::increment>("increment");counter.method<&Counter::decrement>("递减");counter.method<&Counter::value>("value");//注册导出类counter.method<&Counter::gettime>("gettime");//注册导出类,使用右值引用方式,优化资源使用myExtension.add(std::move(counter));//返回扩展对象指针returnmyExtension;}}对应上面例子的php测试代码如下increment().PHP_EOL;echo'resultofincrement()='.$counter->increment().PHP_EOL;echo'decrement()的结果='.$counter->decrement().PHP_EOL;echo'value()的结果='.$counter->value().PHP_EOL;echo'resultofgettime()='.Counter::gettime().PHP_EOL;?>上面php代码的输出结果如下:resultofincrement()=1resultofincrement()=2resultofdecrement()=1resultofvalue()=1resultofgettime()=15233637782.扩展类普通函数支持的风格扩展类的函数必须按照一定的规范来写,返回值和参数的名称和类型规定。否则无法被PHP脚本识别。最常见的就是下面四种函数风格,其实和上一章常见的函数风格差不多,返回值和参数的用法完全一样,就不多说了。//支持的常规方法的签名voidYourClass::example1();voidYourClass::example2(Php::Parameters¶ms);Php::ValueYourClass::example3();Php::ValueYourClass::example4(Php::参数¶ms);此外,如果函数具有修饰符const。以下样式还有4种变体。voidYourClass::example5()const;voidYourClass::example6(Php::Parameters¶ms)const;Php::ValueYourClass::example7()const;Php::ValueYourClass::example8(Php::Parameters¶ms)常数;3.参考PHP-CPP帮助:classes-and-objects

最新推荐
猜你喜欢