この記事では、主に PHP 拡張機能の開発と関連開発技術の比較と紹介を紹介します。これは、必要な友人に参考にしていただけるように共有します。まず、初心者の PHP 拡張機能開発者は、どのようにして成熟した拡張機能を開発し、PHP 開発の高度な分野に参入できるでしょうか?この一連の開発チュートリアルでは、入門段階から上級段階まで段階的に説明します。
このチュートリアル シリーズは Linux (centos を推奨) で開発されており、PHP バージョンは 5.6 で、一定の Linux 操作経験と C/C++ の基礎があることを前提としています。ご質問があり、連絡する必要がある場合は、QQ 技術交換グループ 32550793 に参加して私と連絡してください。
PHP 拡張機能を開発するには、いくつかの技術的な方法とフレームワークがあります。初心者にとって、学習への関心を高めるには、最も簡単に始められ、最も早く結果が得られるフレームワークを選択するのが最善です。誰もが自分に最適なものを見つけられるように、各技術フレームワークを 1 つずつ比較してみましょう。
1. ext-skel C言語開発を使用する
PHP は公式には拡張機能開発者にとって非常に不親切です。ソース コードで提供される Zend API は非常に使いにくく、さまざまなマクロの記述方法が満載です。 Zend API には多くの落とし穴があり、一般の開発者が簡単に陥ってしまう可能性があります。さまざまな不可解なコア ダンプの問題が発生します。 Zend API にはドキュメントがほとんどなく、開発者がこのスキルを真に習得したい場合は、学習に多くの時間を費やす必要があります。
上記は swoole プラグイン開発者の心からの言葉です。この方法でプラグインを開発することは、初心者としての自信に深刻な打撃となることがわかります。幸いなことに、一部のマスターは、PHP 拡張機能を開発するための他の方法を用意してくれました。ZEND API を学習したり、C 言語に習熟する必要はありません。それでも PHP 拡張機能を開発でき、生成された拡張機能の実行速度は低下しません。 C言語で開発されたものとは大きく異なります。
2. Zephir PHP に似た言語開発を使用する
3. PHP-X を使用する C++ 言語開発
4. phpcpp C++ 言語開発を使用する
PHP CPP は、主に C++ 言語用の無料の PHP 開発拡張ライブラリです。これは、拡張機能をより興味深く、便利にするために、単純なコンピューター言語を使用して、開発者が保守および作成するのに便利です。理解しやすく、保守しやすく、美しくコーディングされています。 C++ で書かれたアルゴリズムは、PHP で書かれたアルゴリズムとほぼ同じに見えます。 PHP でプログラミングする方法を知っていれば、C++ で同じことを行う方法を簡単に学ぶことができます。
各フレームワークの hello world 拡張ソースコードを以下にリストします。ソースコードの長さと複雑さから、直感的に理解できます。
ext-skel によって生成された c 拡張ソース コードは明らかに非常に読みにくく、理解するのが非常に困難です。
zephir の拡張ソース コードは PHP 構文に最も似ており、始めるのが最も簡単ですが、成熟した C/C++ ライブラリ コードを追加するのは困難です。
PHP-X と PHP CPP のソース コード スタイルは非常に似ており、どちらも標準の C++ 言語であり、理解しやすいです。拡張機能を開発するこれら 2 つの方法が最も適していることは想像に難くありません。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 ¶ms) { 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 中国語 Web サイト
zephir 英語公式 Web サイト
Zephir のインストールとデモ開発
phpcpp 英語公式 Web サイト
phpcpp英語ヘルプ
phpcpp 中国語ヘルプ
関連推奨事項:
以上がPHP拡張開発における関連開発技術の比較と紹介1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。