#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开发人员: