zephir-(3)你的第一個PHP拓展

#zephir-你的第一個PHP拓展#php

##前言## 先在這裏感謝各位zephir開源技術提供者git

在以前的介紹中你們不只瞭解了zephir具體是一個什麼樣的語言,也get到了它的安裝方式,成功安裝到本身的系統上了.今天讓咱們來一同編寫以前咱們演示過的一些拓展讓咱們來一同動起手來嘗試一下.github

注:筆者水平有限,說的不正確的地方但願你們多多指正,一同交流技術web

附上:shell

喵了個咪的博客:w-blog.cn編程

zephir官網地址:http://zephir-lang.com/json

github地址:https://github.com/phalcon/zephirsession

##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進行檢查,所以,咱們的第一個類將被稱爲「Utils\Greeting」,它包含的方法打印「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 Utils\Greeting::say(), "\n";

恭喜你! ,你第一次上運行PHP擴展。

##2 一個有用的類##

「hello world」類很好檢查若是咱們的環境是對的,如今,讓咱們建立一些更有用的類。

第一個有用的類,咱們要添加此擴展將爲用戶提供過濾設備。 這個類被稱爲「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");

你會看到:

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.");

##3. 總結##

這是一個很是簡單的教程,你能夠看到,很容易使用Zephir開始構建擴展,後面咱們更深刻的學習會和全部語言同樣從最基礎變量語法開始,一步一步深刻,最後多謝你們的支持!

注:筆者能力有限有說的不對的地方但願你們可以指出,也但願多多交流!

zephir技術交流:246348908 歡迎你們的加入!

感謝zephir開發人員:

相關文章
相關標籤/搜索