1. 程式人生 > 其它 >zephir-(2)安裝和初體驗

zephir-(2)安裝和初體驗

zephir-安裝和初體驗

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

zephir主要是解決了PHP開發人員嘗試編寫和編譯PHP拓展所能執行的程式碼的語言。這是一個支援動態/靜態型別的語言,熟悉PHP開發人員可以很好的進行開發。zephir這個名字的主要來源是**(Zend Engine/PHP/Intermediate)**,今天首先介紹zephir的安裝,接著會對zephir進行一些語法上面的介紹,希望大家喜歡!

注:筆者水平有限,說的不正確的地方希望大家多多指正,一同交流技術

附上:

喵了個咪的部落格:w-blog.cn

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

github地址:

https://github.com/phalcon/zephir

1. zephir安裝

安裝Zephir,請遵循以下步驟:

1.1 環境依賴

zephir主要依賴於下面環境

  • gcc >= 4.x/clang >= 3.x
  • re2c 0.13或更高版本
  • gnu 3.81或更高版本
  • autoconf 2.31或更高版本
  • automake 1.14或更高版本
  • libpcre3
  • php開發工具-phpize

如果你使用Ubuntu,你可以安裝所需要的包:

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

由於Zephir是用PHP編寫的需要已經安裝了最新版本的PHP和它必須在您的控制檯可用:

$ php -v
PHP 5.6.5 (cli) (built: Jan 24 2015 20:04:31)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies

同時,確保你也安裝了PHP開發庫與PHP安裝:

$ phpize -v
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226

###1.2 安裝Zephir###

目前Zephir編譯器必須從Github克隆

$ git clone https://github.com/phalcon/zephir

執行Zephir安裝程式(編譯/建立解析器):

$ cd zephir
$ ./install-json
$ ./install -c

測試安裝:

zephir help

會得到如下返回:

 _____              __    _
/__  /  ___  ____  / /_  (_)____
  / /  / _ / __ / __ / / ___/
 / /__/  __/ /_/ / / / / / /
/____/___/ .___/_/ /_/_/_/
         /_/

Zephir version 0.9.2a-dev

Usage: 
	command [options]

Available commands:
	install             Installs the extension (requires root password)
	builddev            Generate/Compile/Install a Zephir extension in development mode
	help                Displays this help
	build               Generate/Compile/Install a Zephir extension
	compile             Compile a Zephir extension
	stubs               Generates extension PHP stubs
	version             Shows the Zephir version
	init [namespace]    Initializes a Zephir extension
	fullclean           Cleans the generated object files in compilation
	api [--theme-path=/path][--output-directory=/path][--theme-options={json}|/path]Generates a HTML API
	generate            Generates C code from the Zephir code
	clean               Cleans the generated object files in compilation

Options:
	-f([a-z0-9-]+)     Enables compiler optimizations
	-fno-([a-z0-9-]+)  Disables compiler optimizations
	-w([a-z0-9-]+)     Turns a warning on
	-W([a-z0-9-]+)     Turns a warning off

注意:當前最新開發版本在0.9.2a-dev穩定版為0.8.0b

##2 Zephir初體驗##

還記得在開篇那個Helloword例子嗎?我們先來簡單介紹一下zephir編譯機制在對例子介紹一下zephir的語法

###2.1 編譯/解釋###

每一種語言都有它自己的“Hello World!”示例,在此ZEPHIR介紹性的例子展示了這種語言的一些重要特性。

在ZEPHIR程式碼必須放在類。這種語言的目的是建立面向物件的庫/框架,因此程式碼移出一類是不允許的。此外,需要一個名稱空間:

namespace Test;

class Hello
{
    public function say()
    {
        echo "Hello World!";
    }
}

一旦這類編譯它產生以下程式碼gcc/clang/vc++:

EPHIR_INIT_CLASS(Test_Hello) {
    ZEPHIR_REGISTER_CLASS(Test, Hello, hello, test_hello_method_entry, 0);
    return SUCCESS;
}

PHP_METHOD(Test_Hello, say) {
    php_printf("%s", "Hello World!");
}

實際上,它預計不需要使用Zephir的開發人員必須知道或者理解C編譯器,然而開發人員使用Zephir的時候,如果你有任何經驗php內部或C語言本身的瞭解,將會有一個更清晰的瞭解在。

###2.2 進一步瞭解zephir的感覺###

在下面的例子中,我們將描述足夠的細節,所以你理解發生了什麼。 我們的目標是給你一個程式設計在Zephir是什麼樣的感覺。 我們將探討的細節 功能在後續章節。

下面的例子非常簡單,它實現了一個類和一個小程式,檢查方法 一個數組的型別

讓我們更詳細地解釋一下程式碼,所以我們可以開始學習Zephir語法。 有很多細節在短短几行程式碼! 我們將解釋一般的想法:

namespace Test;

/**

  • MyTest (test/mytest.zep) / class MyTest { public function someMethod() { / 變數必須宣告 */ var myArray; int i = 0, length; /*建立一個數組 */ let myArray = ["hello", 0, 100.25, false, null]; /* 陣列有多少個元素*/ let length = count(myArray); /* 列印值型別 */ while i < length { echo typeof myArray[i], "n"; let i++; } return myArray; } }

方法中,第一行使用“var”和“int”關鍵字用於宣告一個變數在當地範圍。 每一個變數用於方法必須用其各自的型別宣告。 這個宣告不是可選的, 它幫助編譯器報告關於鍵入變數或變數的使用範圍 通常在執行時錯誤結束。

動態變數是用的var關鍵字來宣告。 這些變數可以分配和重新分配 不同的型別。 另一方面,我們有“i”和“length”整數靜態型別的變數 只能有這種型別的值在整個程式執行。

與PHP相比,你不需要把美元符號($)在變數名前面。

Zephir遵循相同的評論約定為Java,c#、c++,等等。 / /註釋的一條線,而/ 註釋 /可以跨行。預設變數是不可變的,這意味著Zephir預計大多數變數 不變。 變數保持初始值可以優化的編譯器靜態常量。 當需要更改變數的值,必須使用關鍵字“let”:

/* 建立一個數組 */
let myArray = ["hello", 0, 100.25, false, null];

預設情況下,PHP陣列是動態的,它們可能包含不同型別的值。 函式從PHP使用者可以Zephir程式碼中呼叫,函式的示例中“count” 被呼叫時,編譯器可以執行優化避免這個呼叫,因為它已經知道的大小 陣列:

/*陣列有多少個元素 */
let length = count(myArray);

括號在控制流語句是可選的,您也可以使用它們,如果你感覺更舒服。

while i < length {
    echo typeof myArray[i], "n";
    let i++;
}

PHP僅適用於動態變數,方法總是返回動態變數,這意味著如果一個 返回靜態型別的變數,在PHP的一面,你會得到一個動態變數,可以使用 在PHP程式碼。

注意,記憶體是由編譯器自動管理的,所以你不需要分配或釋放 記憶像C,比PHP以類似的方式工作。

##3. 總結##

我們來回顧一下zephir這個名字的來源是**(Zend Engine/PHP/Intermediate)**,今天主要介紹了zephir的安裝,和他的一些基本特性資訊,在後面的章節將會進入正章,來從一步一步深入瞭解zephir!

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!

zephir技術交流:246348908 歡迎大家的加入!

感謝zephir開發人員: