PHP扩展语言: Zephir
Table of Contents
1 什么是Zephir
2 为什么使用Zephir?
互联网发展迅猛,业务增长飞快,所以如今的PHP应用必须在稳定性、性能和功 能上取得一个平衡,以应付日益增长的业务量。所有PHP应 用都会基于一套通用的组件开发。这些组件可能是某些类库或框架,也可能是他们的 集成。框架一旦安装好了,很少会需要修改,作为应用的基础,他们必须功能丰 富并且速度不凡。
要开发出性能好且健壮的类库是比较复杂的,因为它们的实现一般是高度抽象的。 假设基础库不常修改,那我们可以创建扩展来提供要同的功能,但是得益于先编 译后执行的优势,在性能和资源利用上都会得到极大的提升。
使用Zephir,你就可以实现在PHP语言呈面可用的面向对象类库/框架/应用, 提升性能的同时改善和用户体验。
2.1 如果你是一个PHP程序员…
PHP是开发WEB应用最流行的语言。动态类型和解释执行带来的灵活度让开发PHP 变得非常高效。
从版本4开始,到现在的版本5,到之后的版本7,PHP都是基于Zend引擎实现的。 这是一个虚拟机负责执行转换成字节码的PHP代码。Zend引擎存在于所有PHP分发 版本中,使用Zephir,你可以创建基于Zend引擎的PHP扩展。
PHP是Zephir的宿主,所以它们之间很类似。但是,它们之间还是有很大区别, Zephir仍然有自己的特性。例如,Zephir更加严谨,跟PHP对比,它是编译型语 言,开发效率相对会低一些。
2.2 如果你是一个C程序员…
C是有史以来最强大和最流行的编程语言。事实上,PHP就是用C写成了,这也就 是PHP扩展可以在C中直接使用。C让你能自由管理内存,使用底层变量,甚至直 接内嵌汇编片断。
但是,跟PHP、Zephir相对,使用C语言开发大型应用会花费更长的时间,而且如 果你不是很精通的话,有些错误是很难发现的。
Zephir在设计的时候就考虑到了编程安全,所以经没有实现如指针、手动内存管 理这些功能。如果你是一个C程序员,你会发现和C相比Zephir虽没有那么强大但 更友好。
2.3 编译和解释
编译过程通常会降低开发效率;在运行你代码之前,你需要更多的耐心来编译你 的代码。而解释过程倾向于牺牲执行效率来换取开发效率。
在某些情况下,解释执行和编译后再执行的速度是没有太大差距的。
编译型是一次编译多次运行,而解释型是每次运行都需要解释。开发者可以自己 决定应用的哪部分使用Zephir,哪部分不使用。
2.4 静态类型 VS 动态类型
通常来说,在静态类型语言中,变量在它的生命周期内绑定到指定的类型。它的 类型是不能更改的,它仅接受类型兼容的值和操作。C/C++就是这样实现的:
int a = 0; a = "hello"; // not allowed
在动态类型语言中,类型是绑定到值的,而不是绑定到变量。因此,一个变量可 能开始指向某个类型的值,之后又指定另一个类型的值。Javascript/PHP就是典 理的动态类型语言:
var a = 0; a = "hello"; // allowed
3 语言特性
语法类似于PHP、Hack语言,编写简单,避免了指针、内存管理等的烦恼。一段简单的示例如下:
namespace Test; /** * MyTest (test/mytest.zep) */ class MyTest { public function someMethod() { /* Variables must be declared */ var myArray; int i = 0, length; /* Create an array */ let myArray = ["hello", 0, 100.25, false, null]; /* Count the array into a 'int' variable */ let length = count(myArray); /* Print value types */ while i < length { echo typeof myArray[i], "\n"; let i++; } return myArray; } }
和PHP语法很像吧?实际上,zephir会把上面那段代码翻译成C后再编译成PHP扩 展。