#zephir-開篇介紹#php
##前言## 先在這裏感謝各位zephir開源技術提供者c++
筆者在學習phalcon的過程當中瞭解到,phalcon2.x版本經過了zephir重寫,第一感受是zephir這麼牛逼?筆者趕忙嘗試了一下,果不其然很是簡單的就能寫出一個C擴展的helloword,github上面有1000+個Star,緊接着我去搜索了一系列中文資料,可是比較失望,官方也沒有提供中文文檔,也沒有中文社區,這麼好東西這麼好的技術,筆者以爲不能讓他埋沒,今天來開個坑,第一是對於官網的文檔的一個譯文工做,其次是結合本身的理解進行補充,但願你們喜歡!git
注:筆者水平有限,說的不正確的地方但願你們多多指正,一同交流技術程序員
附上:github
喵了個咪的博客:w-blog.cn編程
zephir官網地址:http://zephir-lang.com/安全
github地址:https://github.com/phalcon/zephir框架
##1. zephir介紹##性能
那麼今天的目的是什麼,今天的目的不是告訴你們怎麼用zephir編寫PHP拓展,也不是zephir語法寫那要寫,中國有句老話千里之行始於足下咱們先來簡單的瞭解一下zephir他的特色和特性.學習
###1.1 簡單易於開發###
相信你們和我有同樣的經歷,看到了yaf和phalcon在想爲何C語言的拓展框架能夠這麼的快,我本身能不能寫一個出來呢,而後屁顛屁顛的跑去找資料找大神瞭解,大神說你去看一下**"PHP擴展開發及內核應用"**,結果你們都知道醉了,
主要緣由是須要對C相對的熟悉而且對PHP內核API也要很熟悉,我以爲這已經不是門檻的問題了是太平洋的距離,就草草結束了研究.
當遇到zephir首先了解的就是複雜程度,結果花了10分鐘就跟着流程作了一個小DEMO,就這點看來就開發效率這點看來無可厚非的的高效快速,你們感覺一下:
namespace Kenny; class Kenny { public static function hello() { echo "hello world"; } }
編譯以後引入到php.ini裏面,使用方式以下:
use Kennry\Kennry; echo Kennry::hello(), "/n";
zephir是一個解釋器語言和PHP很是近似,經過zephir的機制編譯成C語言,而後經過C編譯出PHP拓展提供使用,把中間過程高度封裝很大程度讓PHP拓展開發簡單了不少.
"PHP擴展開發及內核應用"地址:http://www.walu.cc/phpbook/
###1.2 zephir特性###
1.zephir是靜態動態結合語言,在zephir內可使用傳統靜態變量,也可使用動態變量,靈活度高
2.內存安全,熟悉C程序的童鞋都知道C能夠控制內存指針,其實用的很差是一件很危險的事情,zephir它不容許你使用指針,它提供了一個task-local垃圾收集器,以免內存泄漏。
3.編譯模式,zephir能狗編譯主流系統Liunx/OSX/Windows可以識別的拓展程序
4.開發源代碼的高級語言,以面向對象爲基礎,編寫拓展都須要基於面向對象
###1.3 感覺一下###
下面是官方提供的一個讓你們感覺一下的小例子做用是過濾變量返回字母字符
namespace MyLibrary; class Filter { public function alpha(string str) { char ch; string filtered = ""; for ch in str { if (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') { let filtered .= ch; } } return filtered; } }
從PHP類可使用以下:
<?php $filter = new MyLibrary\Filter(); echo $filter->alpha("01he#l.lo?/1"); // 結果輸出 hello
##2 爲何是Zephir##
今天的PHP應用程序必須平衡一系列問題包括穩定性、性能和功能。
每個PHP應用程序是基於一組常見的組件或者說框架,這些公共組件是庫/框架或它們的組合。一旦安裝後不多改變,做爲應用程序的基礎,他們必須是有很是快的,
快速和強大的庫會很複雜,因爲高水平的抽象,通常的作法是約定基礎庫或框架不多改變,纔有機會來改善性能和資源消耗
Zephir,您能夠實現面向對象庫/框架/應用程序,使您的應用程序速度提升,改善用戶體驗。
###2.1 若是你是一個PHP程序員…… ###
PHP是在使用的Web應用程序開發中最流行的語言之一。像PHP動態類型和解釋語言,因爲其靈活性,提供很是高的效率。
因爲4,而後第5版,PHP是基於Zend引擎的實現。這是執行從字節碼錶示的PHP代碼的虛擬機。Zend引擎是世界上每個PHP的安裝幾乎目前,隨着ZEPHIR,您能夠建立在Zend引擎運行PHP擴展。
PHP託管ZEPHIR,因此他們顯然有不少類似的地方,可是,他們有給ZEPHIR本身的個性的重要差別。例如,ZEPHIR更加嚴格,它可讓你減小編譯步驟。
###2.2 若是你是一個C程序員…… ###
C是有史以來最強大的和流行的語言之一。 事實上,PHP是用C編寫的, 這是PHP擴展的緣由之一是可用的。 給你的自由 管理內存,使用低級別類型甚至內聯彙編程序。
然而,用C開發大型應用程序能夠把PHP或Zephir相比比預期的要長不少 一些錯誤是很難找到若是你不是一個有經驗的開發人員。
Zephir設計是安全的,因此它沒有實現指針或手動內存管理, 若是你是一個C程序員,你會以爲Zephir強大但更友比如C。
###2.3 編譯VS解讀###
編譯一般會減慢下來的發展; 你須要多一點耐心,使你的代碼編譯運行它以前。此外,該解釋趨於下降有利於生產率的性能
爲了更高的效率,Zephir須要編譯你的代碼,可是他不會影響高生產效率,開發人員能夠決定哪些應用程序的部分應當在ZEPHIR,哪些不是。
###2.4 靜態類型和動態類型語言###
通常來講,在靜態類型語言中,變量是綁定到一個特定類型的一輩子。 其類型不能改變,只能參考實例和兼容操做。 像C / c++語言實現的方案:
int a = 0; a = "hello"; // not allowed
在動態類型,綁定到類型的值,而不是變量。 因此,一個變量可能引用 值的類型,而後從新分配後的值類型無關。 Javascript / PHP的例子 動態類型語言:
var a = 0; a = "hello"; // allowed
儘管動態類型有着生產力的優點,可是動態語言並不能成爲全部應用的選擇,特別是對於很是大型代碼庫和高性能的應用程序
優化性能的動態語言像PHP是更具挑戰性的比靜態語言(如C)。 在靜態語言中,優化器能夠利用類型信息作出決策。 在動態語言中, 只有頗有限的信息是可用的,這使得優化器的選擇更加困難。
若是你須要很是高的性能, 靜態語言多是一個更安全的選擇。
靜態語言的另外一個好處是編譯器執行額外的檢查。 編譯器沒法發現邏輯錯誤,這更重要, 可是編譯器能夠提早發現錯誤,動態語言只能在運行提示報錯信息。
Zephir是靜態和動態類型都容許使用的。
###2.5 代碼保護###
在某些狀況下,編譯不顯著提升性能,這多是由於瓶頸所在 在應用程序的I / O(頗有可能),而不是計算/內存限制。 然而,編譯代碼也可能帶來某種程度的intelectual保護您的應用程序。 Zephir,產生本地二進制文件,你也有能力「隱藏」用戶或客戶的原始代碼。
##3. 總結##
Zephir不是用來取代PHP或C,相反,咱們認爲這是一個補充,容許開發者進入代碼編譯和靜態類型.Zephir正是試圖加入從C和PHP的世界,美好的事物 尋找機會使他們的應用程序更快!,若是你喜歡PHP,若是你渴望執行效率,那就別猶豫趕快嘗試一下zephir吧!
注:筆者能力有限有說的不對的地方但願你們可以指出,也但願多多交流!
zephir技術交流:246348908 歡迎你們的加入!
感謝zephir開發人員: