
おそらくすべてのPHP開発者(およびPHPだけでなく)には夢があります-独自のPHP拡張機能を定義することは、定義上、解釈されたコードよりも速く動作しますが、Zend Engineの複雑さを掘り下げることはなく、C ++を知らなくてもよいことです。 そして今、夢が叶う日が近づいています。 Zephirと呼ばれる非常に興味深いプログラミング言語についてお話したいと思います。 読むのが面倒な人には、
サイトにアクセスして指示に従ってください。拡張機能の書き方と、この道で発生する落とし穴についてお話します。
Zephirとは何ですか? Zephirは、タイプ(タイピング)とセキュリティに重点を置いて、PHPの拡張機能を迅速かつ簡単に作成するためのオープンソースの高レベルプログラミング言語です。 その構文は、PHP自体に非常に似ています。
それでは始めましょう。 まず、不足しているコンポーネントをインストールする必要があります。
$ sudo apt-get install php5-dev re2c libjson0-dev libpcre3-dev
- php5-dev-拡張機能開発用のファイルパッケージ
- re2c-正規表現コンパイラ
- libjson0-dev-json形式で作業するためのライブラリヘッダー、json-cパッケージ
- libpcre3-dev-正規表現を操作するための機能を提供するライブラリのヘッダー
次に、リポジトリからクローンを作成します。
$ git clone https://github.com/phalcon/zephir.git
リポジトリ内のバージョンは常に安定しているわけではありません。コミット6eda047f512b6600cf8afc79348381c64198fcb5を使用しました。
Zephirを使用してディレクトリに移動し、拡張機能のすべてを構成します。 現在、リポジトリにはテスト拡張機能「test」があります-それはあまり気にしません。
$ cd zephir $ cp -r ext/ .ext/ $ mkdir app
拡張機能のクラスバージョンを作成する
$ nano app/version.zep
namespace App; class Version { public static function get() { return "0.0.1 super beta"; } }
config.json構成ファイルを調整します
$ nano config.json
{"namespace":"app"}
注意!- 構成内の名前空間は、クラス内の名前空間であり、拡張子の並べ替えがあるディレクトリの名前でもあります。
- 拡張機能のクラスは、拡張機能の名前空間で始まる必要があります(たとえば、Test \ TestCaseは正しくありません)
- 各名前空間はディレクトリで表す必要があり、クラスには拡張子.zepのファイルが提供されます
- ラブケースの拡張機能のすべてのファイルとディレクトリ
今こそ、私たちの創造を試す時です。 私たちはまだzephirのルートディレクトリにいることを思い出してください。 ここで、zephirをデプロイし、拡張機能をコンパイルする必要があります。
$ sudo ./install $ sudo ./bin/zephir compile
その結果、ディレクトリ/ usr / lib / php5 / 20121212 /にapp.soライブラリがあります(PHPのバージョンによって異なります)。 PHPに接続する必要があります。 これを行うために、次のことを行います(cliの例ですが、特定の場合にこれらのアクションを再現できます)。
$ sudo nano /etc/php5/mods-available/app.ini
行を挿入
; configuration for php Our Awesome App module ; priority=50 extension=app.so
そしてリンク
$ sudo ln -s ../../mods-available/app.ini /etc/php5/cli/conf.d/50-app.ini
次は、最初の拡張機能を確認します。
$ php -r "echo App\Version::get() . PHP_EOL;"
そして、これらの素晴らしいラインを見ます:
0.0.1 super beta
拡張機能のコンパイル中に、欠落しているテストに関するメッセージが表示される場合があります。 Zephirには、コンパイルする前にテストを実行する機能があります。 サンプルテストはunit-testsディレクトリにあります。
PSケーキは本物です
PSS PMでのすべてのコメントと修正。