zephir-(2)安裝和初體驗
zephir-安裝和初體驗
前言 先在這裡感謝各位zephir開源技術提供者
zephir主要是解決了PHP開發人員嘗試編寫和編譯PHP拓展所能執行的程式碼的語言。這是一個支援動態/靜態型別的語言,熟悉PHP開發人員可以很好的進行開發。zephir這個名字的主要來源是**(Zend Engine/PHP/Intermediate)**,今天首先介紹zephir的安裝,接著會對zephir進行一些語法上面的介紹,希望大家喜歡!
注:筆者水平有限,說的不正確的地方希望大家多多指正,一同交流技術
附上:
喵了個咪的部落格:w-blog.cn
zephir官網地址:http://zephir-lang.com/
github地址:
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開發人員: