Zephir還有這本手冊,是爲了PHP開發者想開發C擴展並下降複雜度面打算的。php
咱們假設你有編程語言的基礎。咱們會在介紹的時候儘量的向PHP,C,Javascript等語言的特色來陳述。 若是你懂得這些語言中的某一種的話,咱們會指出它們來Zephir的類似點。固然其它的一些Zephir的新特性還有 不一樣點咱們也會一一介紹。git
若是你成功的安裝了Zephir,你能夠在命令行中執行下面的命令:github
$ zephir help
若是安裝正確的話,你會看到下面的提示:web
_____ __ _ /__ / ___ ____ / /_ (_)____ / / / _ \/ __ \/ __ \/ / ___/ / /__/ __/ /_/ / / / / / / /____/\___/ .___/_/ /_/_/_/ /_/ Zephir version 0.4.5a Usage: command [options]Available commands: build Generate/Compile/Install a Zephir extension clean Cleans the generated object files in compilation compile Compile a Zephir extension full-clean Cleans the generated object files in compilation generate Generates C code from the Zephir code help Displays this help init [namespace] Initializes a Zephir extension install Installs the extension (requires root password) version Shows Zephir version
首先咱們要作的是創建一個基礎的項目結構,它爲咱們開發擴展提供了基本的結構。這裏,咱們創建了一個擴展叫作"utils":編程
$ zephir init utils
執行上面的命令後,一個名爲"utils"的目錄被創建在當前的目錄下:json
utils/ ext/ utils/
目錄 "ext/" (inside utils) 包含了編譯器將會用到來編譯擴展的代碼. 另外一個目錄是"utils",這個目錄的名字必需要和咱們的擴展名字保持一至。咱們寫的Zephir代碼將會被放到這裏。session
We need to change the working directory to "utils" to start compiling our code:框架
$ cd utils$ ls ext/ utils/ config.json
列出的目錄中,還有一個文件叫作"config.json",這個文件包括了一些配置,它能夠用來改變Zephir和擴展的行爲。編程語言
Zephir是被設計成開發面向對象擴展的。爲了開發出咱們的第一個功能,咱們增長一個類到擴展中。ide
就像不少工具和語言同樣,第一件事就是去寫"hello world"。同時也檢測Zephir是否是能夠正常運做。 因此咱們的第一個類就叫做"Utils\Greeting",它包含了一個函數,這個函數會打印出"hello world!"。
The code for this class must be placed in "utils/utils/greeting.zep":
namespace Utils;class Greeting{ public static function say() { echo "hello world!"; }}
下面開始編譯並生成擴展:
$ zephir build
首先,只會在第一次執行的時候,大量的內部命令被執行,併產生了一些必要的代碼和配置文件,最終把這個類生成PHP的擴展。 若是一切順利的話,你將會看到:
...Extension installed!Add extension=utils.so to your php.iniDon't forget to restart your web server
在上面的步驟中,你可能須要提供你的root賬號和密碼去安裝這個擴展。 最後,這個擴展必須增長到php.ini文件中,以便PHP能夠加載它: extension=utils.so
如今這個擴展已經增長到php.ini文件中了,執行下面的命令來確認擴展是否已經正確的加載進來了:
$ php -m[PHP Modules]Core date libxml pcre Reflection session SPL standard tokenizer utils xdebug xml
擴展utils必需要出如今上面的列表中。那麼如今,咱們嘗試在PHP中運行這個hello world擴展。 爲了完成這個測試,咱們寫了一個簡單的PHP代碼來執行擴展中的靜態函數:
<?phpecho Utils\Greeting::say(), "\n";
恭喜!,你已經完成你的第一個PHP擴展了。
"hello world"這個類的擴展是用來檢測咱們的不幸是否正確的。如今,讓咱們創建一些其它更有用處的類。
第一個有用的類咱們將要增長到PHP擴展中將會提供一個過濾工具給用戶。 這個類就叫作"Utils\Filter",這個類的代碼必需要放在"utils/utils/filter.zep"中:
這個類的基本的框架以下:
namespace Utils;class Filter{}
這個類包含了一個函數,這個函數的做用是幫助用戶去過濾一些不合法的字符。 第一個函數叫作"alpha",它的目標就是去過濾非ascii碼的字符。 開始,咱們只是簡單的打印出字符串的每個字節:
namespace Utils;class Filter{ public function alpha(string str) { char ch; for ch in str { echo ch, "\n"; } }}
當調用這個函數的時候:
<?php$f = new Utils\Filter();$f->alpha("hello");
You will see:
h e l l o
檢查字符串中的每個字符是一個直接了當的方法,如今咱們創建另外一個正確過濾字符的函數:
class Filter{ public function alpha(string str) -> string { char ch; string filtered = ""; for ch in str { if (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') { let filtered .= ch; } } return filtered; }}
這個寫好的函數能夠像剛纔同樣測試:
<?php$f = new Utils\Filter();echo $f->alpha("!he#02l3'121lo."); // prints "hello"
下面的視頻演示了上面的這些過程:
這是一個簡單的指導教程,可是正如你所見到的,使用Zephir你能夠很容易的創建一個PHP擴展。 咱們建議你繼續閱讀這個手冊,以便你能夠了解更多Zephir的特性。