目錄
一、使用ext-skel C語言開發
二、使用zephir 類別php語言開發
三、使用PHP-X C 語言開發
四、使用phpcpp C 語言開發
五、各開發框架的 hello world 擴展源碼大比拼
參考文獻
首頁 後端開發 php教程 PHP擴展開發之 相關開發技術比較及介紹

PHP擴展開發之 相關開發技術比較及介紹

Apr 13, 2018 pm 04:13 PM
php 對比 開發技術

這篇文章跟大家分享的內容是PHP擴充開發之相關開發技術對比及介紹 ,有著一定的參考價值,有需要的朋友可以參考一下

PHP擴充是高階PHP程式設計師必須了解的技能之一,對於初入門的PHP擴展開發者,怎麼能開發一個成熟的擴展,進入PHP開發的高階領域呢?本系列開發教學將手把手帶您從入門進入進階階段。
本教學系列在linux下方開發(建議使用centos),php版本用的是5.6,並假設您有一定的linux操作經驗和c/c 基礎。
有問題需要溝通的朋友請加QQ技術交流群32550793和我溝通。

開發php擴充有好幾種技術方法和框架,對於初學者來說,最好能夠選擇一個最容易下手,最快出效果的框架,這樣才能提升學習的興趣。以下逐一比較一下各個技術框架,讓大家能找到最適合自己的。

一、使用ext-skel C語言開發

ext-skel是PHP官方原始碼裡提供的產生php擴充的工具,可以產生一個c語言框架的php擴充的骨架。

PHP 官方對擴充開發者非常不友好,原始碼中提供的Zend API極其難用,API複雜且凌亂,充斥著各種巨集的寫法。 Zend API坑​​非常多,普通開發者很容易踩到坑裡。出現各種莫名其妙的core dump問題。 Zend API幾乎沒有任何文檔,開發者如果要真正掌握這項技能需要付出大量的學習時間。

以上是swoole插件開發者的肺腑之言,可見用這個方法來開發插件,對我們初學者來說將是對自信心極嚴重的打擊。幸好有大神們為我們準備了其他開發php擴展的方法,不用學習zend api,不用精通c語言,也照樣能開發php擴展,而且生成的擴展運行速度不會比c語言開發的相差太多。

二、使用zephir 類別php語言開發

Zephir提供了一種類似php的高階語言語法的方式,來自動產生擴展的c語言程式碼,使編寫php擴充變得非常的簡單。不過這種開發方式帶來了一個問題,就是由於他用的不是c/c 語言開發,那就沒辦法直接利用現有的各種c/c 開發函式庫來實現強大的功能。所以感覺上有點雞肋。

三、使用PHP-X C 語言開發

php-x是知名的swoole擴展開發者根據多年的開發經驗,提煉出來的一套基於c 的擴展開發框架。從文件來看,這是一個比較容易上手的開發框架,資料類型很齊全,和php cpp的開發風格非常相似,但本人還沒有去體驗使用。
依照php-x官方的文檔,開發出來的擴充只支援PHP7以上,這是一個遺憾。

四、使用phpcpp C 語言開發

PHP CPP是我重點推薦的php擴充開發框架,簡明易懂,功能強大,開發效率高,程式碼易維護,執行速度快。

PHP CPP是一款免費的php開發擴充庫,主要針對C 語言,可以進行類別集合的擴展和構建,採用簡單的計算機語言,讓擴展變得更有趣更有用,方便開發者進行維護和編寫,易於理解、維護輕鬆且程式碼優美。用C 寫的演算法看起來與用PHP寫的演算法幾乎完全相同。如果你知道如何在PHP中編程,你可以很容易地學習如何在C 中做同樣的事情。

  • 優點一:不需要Zend引擎知識。

Zend引擎的內部太複雜,Zend引擎的程式碼是一團糟,而且大多是無證的。但是PHP-CPP庫已經在非常容易使用的C 類別和物件中封裝了所有這些複雜的結構。你可以使用C 寫出驚人的快速演算法,而不必直接呼叫Zend引擎,甚至無需查看Zend引擎原始碼。使用PHP-CPP,您可以編寫本機程式碼,而無需處理PHP的內部。

  • 優點二:支援所有重要的PHP功能

#使用PHP-CPP,您可以像使用普通PHP腳本一樣輕鬆地處理變量,數組,函數,對象,類,接口,異常和命名空間。除此之外,你可以使用C 的所有功能,包括線程,lambda和非同步程式設計。

  • 優點三:支援PHP 5.X,PHP7的擴充開發

PHP-CPP有兩套擴充開發框架,分別支援PHP 5.X,PHP7,雖然框架程式碼有兩個,但是介面卻是一樣的。所以如果你要開發相容多個版本的php擴展,不會花你額外太多時間做相容。

五、各開發框架的 hello world 擴展源碼大比拼

下面列出各個框架的hello world擴展源碼,從源碼長度和複雜度,就能有個直觀感受。
ext-skel產生的c擴充原始碼明顯可讀性極差,也極難理解。
zephir的擴充原始碼最類似php語法,最容易入手,但難以加入成熟的c/c 函式庫程式碼。
PHP-X和PHP CPP的原始碼風格很相似,都是標準的c 語言,都很容易看懂。不難想像,這兩種方式開發擴充必然是最合適的,因為我們既能利用c 的封裝簡化開發,又能直接呼叫市面上各個成熟c 函式庫為我們服務。

ext-skel的hello world原始碼

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_helloworld.h"

static int le_helloworld;

PHP_FUNCTION(confirm_helloworld_compiled)
{
    char *arg = NULL;
    int arg_len, len;
    char *strg;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
        return;
    }

    len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "helloworld", arg);
    RETURN_STRINGL(strg, len, 0);
}

PHP_MINIT_FUNCTION(helloworld)
{
    return SUCCESS;
}

PHP_MSHUTDOWN_FUNCTION(helloworld)
{

    return SUCCESS;
}

PHP_RINIT_FUNCTION(helloworld)
{
    return SUCCESS;
}

PHP_RSHUTDOWN_FUNCTION(helloworld)
{
    return SUCCESS;
}

PHP_MINFO_FUNCTION(helloworld)
{
    php_info_print_table_start();
    php_info_print_table_header(2, "helloworld support", "enabled");
    php_info_print_table_end();

}

const zend_function_entry helloworld_functions[] = {
    PHP_FE(confirm_helloworld_compiled,    NULL)        /* For testing, remove later. */
    PHP_FE_END    /* Must be the last line in helloworld_functions[] */
};

zend_module_entry helloworld_module_entry = {
    STANDARD_MODULE_HEADER,
    "helloworld",
    helloworld_functions,
    PHP_MINIT(helloworld),
    PHP_MSHUTDOWN(helloworld),
    PHP_RINIT(helloworld),        /* Replace with NULL if there's nothing to do at request start */
    PHP_RSHUTDOWN(helloworld),    /* Replace with NULL if there's nothing to do at request end */
    PHP_MINFO(helloworld),
    PHP_HELLOWORLD_VERSION,
    STANDARD_MODULE_PROPERTIES
};

#ifdef COMPILE_DL_HELLOWORLD
ZEND_GET_MODULE(helloworld)
#endif
登入後複製

zephir的hello world原始碼

namespace Test;
class Hello
{
    public function say()
    {
        echo "Hello World!";
    }
}
登入後複製

#PHP-X的hello world原始碼

#include <phpx.h>
using namespace std;
using namespace php;

//声明函数
PHPX_FUNCTION(say_hello);

//导出模块
PHPX_EXTENSION()
{
    Extension *ext = new Extension("hello-world", "0.0.1");
    ext->registerFunction(PHPX_FN(say_hello));
    return ext;
}

//实现函数
PHPX_FUNCTION(say_hello)
{
    echo("hello world");
}
登入後複製

PHP CPP的hello world原始碼

#include <phpcpp.h>
void say_hello(Php::Parameters &params)
{
    Php::out << "hello world" << std::endl;
}
extern "C" {
    PHPCPP_EXPORT void *get_module() 
    {
        static Php::Extension extension("helloworld", "1.0");
        extension.add("say_hello", say_hello);
        return extension;
    }
}
登入後複製

參考文獻

如何基於PHP-X 快速開發一個PHP擴充
PHP-X中文幫助
5分鐘PHP擴充開發快速入門
zephir中文網
zephir英文官網
zephir安裝與示範開發
phpcpp英文官網
phpcpp英文幫助
phpcpp中文幫助


以上是PHP擴展開發之 相關開發技術比較及介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1273
29
C# 教程
1252
24
PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

See all articles