#zephir-安裝和初體驗#php
##前言## 先在這裏感謝各位zephir開源技術提供者c++
zephir主要是解決了PHP開發人員嘗試編寫和編譯PHP拓展所能執行的代碼的語言。這是一個支持動態/靜態類型的語言,熟悉PHP開發人員能夠很好的進行開發。zephir這個名字的主要來源是**(Zend Engine/PHP/Intermediate)**,今天首先介紹zephir的安裝,接着會對zephir進行一些語法上面的介紹,但願你們喜歡!git
注:筆者水平有限,說的不正確的地方但願你們多多指正,一同交流技術github
附上:編程
喵了個咪的博客:w-blog.cnjson
zephir官網地址:http://zephir-lang.com/小程序
github地址:https://github.com/phalcon/zephirc#
##1. zephir安裝##api
安裝Zephir,請遵循如下步驟:數組
###1.1 環境依賴###
zephir主要依賴於下面環境
若是你使用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開發人員: