日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

基于Swoole开发PHP扩展

發布時間:2024/4/14 php 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Swoole开发PHP扩展 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

Swoole-1.9.7增加了一個新特性,可以基于Swoole使用C++語言開發擴展模塊,在擴展模塊中可以注冊PHP內置函數和類。現在可以基于Swoole來編寫PHP擴展了。Swoole使用了C++ 11封裝了ZendAPI,配合C++ IDE的自動提示和自動補齊,使PHP擴展開發的效率得到了大幅提升,分分鐘寫出一個PHP擴展。

環境準備

  • IDE建議使用Eclipse CDT
  • 必須安裝Swoole-1.9.7或更高版本
  • 必須要有Swoole源碼

編寫程序

#include <string> #include <iostream>#include "PHP_API.hpp" #include "module.h"using namespace std; using namespace PHP;extern "C" {int swModule_init(swModule *);void swModule_destory(swModule *); }//C++函數必須要在頭部聲明 void cpp_hello_world(Args &args, Variant &retval);int swModule_init(swModule *module) {module->name = (char *) "test";PHP::registerFunction(function(cpp_hello_world)); }void swModule_destory(swModule *module) {PHP::destory(); }//C++函數的實現 void cpp_hello_world(Args &args, Variant &retval) {printf("SWOOLE_BASE=%ld\n", PHP::constant("SWOOLE_BASE").toInt());printf("swoole_table::TYPE_INT=%ld\n", PHP::constant("swoole_table::TYPE_INT").toInt());Variant argv = args.toArray();var_dump(argv);Array arr(retval);arr.set("key", "key");arr.set("value", 12345); }
  • PHP_API.hpp和module.h在Swoole包中
  • swModule_init表示模塊初始化函數
  • swModule_destory是模塊銷毀函數
  • cpp_hello_world就是我們編寫的C++擴展函數,在PHP代碼中可以調用cpp_hello_world()來執行
  • 在swModule_init中調用了PHP::registerFunction注冊C++函數到PHP中

程序邏輯

cpp_hello_world函數中的代碼邏輯比較簡單,首先cpp_hello_world函數一共2個參數,argv表示傳入的參數,retval是給PHP的返回值。

在代碼中可以直接使用數組的方式訪問參數,如下:

void cpp_hello_world(Args &args, Variant &retval) {int a = argv[0].toInt();string b = argv[1].toString();double c = argv[2].toFloat(); }

使用var_dump函數可以打印PHP變量的值。

Variant d = argv[3]; var_dump(d);

返回值可以直接賦值。

retval = 1234; retval = "hello world";

可以使用Array類實現數組操作。

//將返回值轉為數組 Array arr(retval); arr.set("key", 123); arr.set("value", "world");

編譯程序

編寫Makefile

SWOOLE_SRC = "/home/htf/workspace/swoole" PHP_INCLUDE = `php-config --includes` PHP_LIBS = `php-config --libs` PHP_LDFLAGS = `php-config --ldflags`all: test.cppc++ -DHAVE_CONFIG_H -g -o test.so -O0 -fPIC -shared test.cpp ${PHP_INCLUDE} -std=c++11 -I${SWOOLE_SRC}/include -I${SWOOLE_SRC} clean: test.sorm test.so

編譯模塊

make

編譯完成后,會生成一個test.so,可以使用swoole_load_module方法來加載模塊

運行程序

$module = swoole_load_module(__DIR__.'/test.so'); cpp_hello_world(1234, "hello", 3.1415, array("xxx", "eeee")); $module->destory();

轉載于:https://my.oschina.net/matyhtf/blog/864656

總結

以上是生活随笔為你收集整理的基于Swoole开发PHP扩展的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。