Zephir--最簡單的php擴展開發工具

更多關於PHP的技術文章http://www.codefrom.com/php

php的擴展是用c語言編寫,Zend是語言引擎,PHP內核。在實際編寫php擴展的時候,須要使用大量的Zend Api,雖然運行效率高,可是其實難度也比較大。見:http://php.net/manual/zh/internals2.ze1.zendapi.phphtml

Zephir提供了一種相似php的高級語言語法的方式,來自動生成擴展的c語言代碼,使編寫php擴展變得很是的簡單。git

官網:http://www.zephir-lang.com/
官方的安裝教程:http://www.zephir-lang.com/welcome.html
ubuntu下須要安裝相關的依賴github

$ sudo apt-get update
$ sudo apt-get install git gcc make re2c php5 php5-json php5-dev libpcre3-dev

固然別的平臺根據實際提示,安裝對應的程序便可json

$ git clone https://github.com/phalcon/zephir
$ cd zephir
$ ./install-json
$ ./install -c

測試安裝是否成功ubuntu

$ zephir help

使用示例以下:api

$ zephir init utils

會在當前目錄下生成函數

ext/ utils/ config.json

而後編輯utils子目錄下的greeting.zep 內容以下:測試

namespace Utils;

 class Greeting
 {
     public static function say()
     {
         var a = "hello world";
         echo strtoupper(a);
     }
 }

這裏的namespace是必須添加的,輸出大寫的"hello,world"。能夠直接使用php的內置函數。
而後運行ui

$ zephir build

而後就會在擴展目錄下生成utils.so,修改php.ini添加添加該擴展。調用方法:

<?php

echo Utils\Greeting::say(), "\n";

擴展閱讀:
zephir生成的c語言文件默認在/ext/utils/greeting.zep.c,核心內容以下:

PHP_METHOD(Utils_Greeting, say) {

    zval *a, *_0;

    ZEPHIR_MM_GROW();
    ZEPHIR_INIT_VAR(a);
    ZVAL_STRING(a, "hello world", 1);

    ZEPHIR_INIT_VAR(_0);
    zephir_fast_strtoupper(_0, a);
    zend_print_zval(_0, 0);
    ZEPHIR_MM_RESTORE();

}

能夠發現zephir一方面直接zend api 如:zend_print_zval。另外一方面封裝了zend api,如:zephir_fast_strtoupper 。直接修改該文件的c代碼,使用原php擴展的編輯方法也是能夠滴。

相關文章
相關標籤/搜索