zephir-(3)你的第一個PHP拓展
#zephir-你的第一個PHP拓展#
##前言## 先在這裡感謝各位zephir開源技術提供者
在之前的介紹中大家不僅瞭解了zephir具體是一個什麼樣的語言,也get到了它的安裝方式,成功安裝到自己的系統上了.今天讓我們來一同編寫之前我們演示過的一些拓展讓我們來一同動起手來嘗試一下.
注:筆者水平有限,說的不正確的地方希望大家多多指正,一同交流技術
附上:
喵了個咪的部落格:w-blog.cn
zephir官網地址:http://zephir-lang.com/
github地址:https://github.com/phalcon/zephir
##1. 第一個拓展##
Zephir和這本書(官方文件和此譯文講解)的目的是為PHP開發人員想要用較低的複雜性建立c擴充套件。
假設你有一個或多個其他程式語言的經驗,我們將指出zephit和PHP中,C、Javascript和其他語言有很多相似的特性,以及新的或不同的許多特性。
如果你已經成功安裝Zephir,你必須能夠在您的控制檯執行以下命令:
$ zephir help
如果一切都好,你應該在你的螢幕上看到以下幫助資訊.
###1.1 擴充套件框架###
我們要做的第一件事就是生成一個擴充套件框架,這將提供給我們擴充套件的基本 我們需要開始工作的結構。 在我們的例子中,我們將建立一個副檔名為“utils”:
$ zephir init utils
執行之後,一個目錄稱為“utils”建立在當前工作目錄:
$ cd utils
$ ls
ext/ utils/ config.json
目錄“ext/”包含將要由編譯器用於產生擴充套件的程式碼。建立的另一個目錄是“utils”,在utils目錄下面還有一個utils目錄,我們將我們編寫的Zephir程式碼放在在這個目錄中。
目錄列表也將向我們展示一個檔案稱為“config.json”,該檔案包含配置設定 我們可以用它來改變Zephir擴充套件的行為以及一些擴充套件資訊。
###1.2 我們的第一節課###
Zephir生成面向物件的擴充套件。開始開發,我們需要給我們的一個類新增到擴充套件功能。
正如在許多語言/工具,我們要做的第一件事就是寫一個“Hello World”對zephir進行檢查,因此,我們的第一個類將被稱為“UtilsGreeting”,它包含的方法列印“hello world!”.。
這個類的程式碼必須被放置在“utils/utils/greeting.zep”:
namespace Utils;
class Greeting
{
public static function say()
{
echo "hello world!";
}
}
現在,我們需要告訴Zephir編譯和生成的擴充套件,必須在根目錄:
$ zephir build
當然我們在編譯中可能遇到很多問題比如:
PHP Warning: shell_exec().....
這是應為php.ini沒有開啟這些函式導致無法使用這些函式,我們找到disable_functions = 然後去掉後面的exec和shell_exec,passthr,systemzephir的編譯依賴於這些函式
還有可能可能會看到如下提示:
error: re2c is not installed
這是應為沒有安裝re2c拓展,執行如下語句安裝:
wget http://downloads.sourceforge.net/project/re2c/0.15.3/re2c-0.15.3.tar.gz
tar zxf re2c-0.15.3.tar.gz && cd re2c-0.15.3
./configure
make && make install
如果一切順利,您將看到以下訊息 的輸出:
...
Extension installed!
Add extension=utils.so to your php.ini
Don't forget to restart your web server
最後,必須新增到php擴充套件。 php.ini中加入extension=utils.so。
現在,新增到您的php擴充套件。 ini,檢查是否正常載入擴充套件通過執行以下:
$ php -m
[PHP Modules]
Core
date
libxml
pcre
Reflection
session
SPL
standard
tokenizer
utils
xdebug
xml
擴充套件“utils”必須的一部分輸出表明擴充套件是正確載入。 現在,讓我們看看我們 “hello world”直接執行的PHP。 為此,您可以建立一個簡單的PHP檔案呼叫靜態方法 剛剛建立的:
<?php
echo UtilsGreeting::say(), "n";
恭喜你! ,你第一次上執行PHP擴充套件。
##2 一個有用的類##
“hello world”類很好檢查如果我們的環境是對的,現在,讓我們建立一些更有用的類。
第一個有用的類,我們要新增此擴充套件將為使用者提供過濾裝置。 這個類被稱為“UtilsFilter”,其程式碼都必須放置在“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 UtilsFilter();
$f->alpha("hello");
你會看到:
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 UtilsFilter();
echo $f->alpha("!he#02l3'121lo.");
##3. 總結##
這是一個非常簡單的教程,你可以看到,很容易使用Zephir開始構建擴充套件,後面我們更深入的學習會和所有語言一樣從最基礎變數語法開始,一步一步深入,最後多謝大家的支援!
注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!
zephir技術交流:246348908 歡迎大家的加入!
感謝zephir開發人員: