Zephir介绍

zephir介绍

Zephir是一种可以让PHP开发者尝试编写和编译可以被PHP执行代码的一种语言。它是动态/静态类型,它的一些特性对于PHP 开发者来说是非常的相似的。

Zephir的名字是取自Zend Engine/PHP/Intermediate的缩写。建议发音为zephyr相同。事实上Zephir的创造者发音为zaefire_.

简单易于开发

相信大家和我有一样的经历,看到了yaf和phalcon在想为什么C语言的拓展框架可以这么的快,我自己能不能写一个出来呢?然后屁颠屁颠的跑去找资料找大神了解,大神说你去看一下 “PHP扩展开发及内核应用”,结果大家都知道醉了。

主要原因是需要对C相对的熟悉并且对PHP内核API也要很熟悉,我觉得这已经不是门槛的问题了是太平洋的距离,就草草结束了研究。

当遇到zephir首先了解的就是复杂程度,结果花了10分钟就跟着流程做了一个小DEMO,就这点看来就开发效率这点看来无可厚非的的高效快速,大家感受一下。

1
2
3
4
5
6
7
8
9
namespace Icyboy;

class Hello
{

public static function hi()
{

echo "hello world";
}
}

编译之后引入到php.ini里面,使用方式如下

1
2
3
use Icyboy\Hello;

echo Hello::hi() . PHP_EOL;

zephir是一个解释器语言和PHP非常近似,通过zephir的机制编译成C语言,然后通过C编译出PHP拓展提供使用,把中间过程高度封装,很大程度让PHP拓展开发简单了很多。

PHP扩展开发及内核应用 http://www.walu.cc/phpbook

zephir特性

  • zephir是静态动态结合语言,在zephir内可以使用传统静态变量,也可以使用动态变量,灵活度高。
  • 内存安全,熟悉C程序的童鞋都知道C可以控制内存指针,其实用的不好是一件很危险的事情,zephir它不允许你使用指针,它提供了一个task-local垃圾收集器,以避免内存泄漏。
  • 编译模式,zephir能够编译主流系统Liunx/OSX/Windows能够识别的拓展程序。
  • 开发源代码的高级语言,以面向对象为基础,编写拓展都需要基于面向对象。

感受一下

下面是官方提供的一个让大家感受一下的小例子作用是过滤变量返回字母字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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类可以使用如下

1
2
3
4
<?php

$filter = new MyLibrary\Filter();
echo $filter->alpha("01he#l.lo?/1"); // 结果输出 hello

为什么是Zephir

今天的PHP应用程序必须平衡一系列问题包括稳定性、性能和功能。

每一个PHP应用程序是基于一组常见的组件或者说框架,这些公共组件是库/框架或它们的组合。一旦安装后很少改变,作为应用程序的基础,他们必须是有非常快的,

快速和强大的库会很复杂,由于高水平的抽象,一般的做法是约定基础库或框架很少改变,才有机会来改善性能和资源消耗。

Zephir,您可以实现面向对象库/框架/应用程序,使您的应用程序速度提高,改善用户体验。

如果你是一个PHP程序员……

PHP是在使用的Web应用程序开发中最流行的语言之一。像PHP动态类型和解释语言,由于其灵活性,提供非常高的效率。

PHP是基于Zend引擎的实现。这是执行从字节码表示的PHP代码的虚拟机。Zend引擎是世界上每一个PHP的安装几乎目前,随着Zephir,您可以创建在Zend引擎运行PHP扩展。

PHP托管Zephir,所以他们显然有很多相似的地方,但是,他们有给Zephir自己的个性的重要差异。例如,Zephir更加严格,它可以让你减少编译步骤。

如果你是一个C程序员……

C是有史以来最强大的和流行的语言之一。 事实上,PHP是用C编写的。

然而,用C开发大型应用程序可以把PHP或Zephir相比比预期的要长很多,一些错误是很难找到。如果你不是一个有经验的开发人员。

Zephir设计是安全的,所以它没有实现指针或手动内存管理,如果你是一个C程序员,你会觉得Zephir强大,比C更加的友好。

编译VS解读

编译通常会减慢下来的发展;你需要多一点耐心,使你的代码编译运行它之前。此外,该解释趋于降低有利于生产率的性能。

为了更高的效率,Zephir需要编译你的代码,但是他不会影响高生产效率,开发人员可以决定哪些应用程序部分应当在Zephir,哪些不是。

静态类型和动态类型语言

一般来说,在静态类型语言中,变量是绑定到一个特定类型的一生。 其类型不能改变,只能参考实例和兼容操作。 像C / c++语言实现的方案

1
2
int a = 0;
a = "hello"; // not allowed

在动态类型,绑定到类型的值,而不是变量。 所以,一个变量可能引用值的类型,然后重新分配后的值类型无关。 Javascript / PHP的例子 动态类型语言

1
2
var a = 0;
a = "hello"; // allowed

尽管动态类型有着生产力的优势,但是动态语言并不能成为所有应用的选择,特别是对于非常大型代码库和高性能的应用程序。

优化性能的动态语言像PHP比静态语言(如C)是更具挑战性的。 在静态语言中,优化器可以利用类型信息做出决策。 在动态语言中,只有很有限的信息是可用的,这使得优化器的选择更加困难。

如果你需要非常高的性能,,静态语言可能是一个更安全的选择。

静态语言的另一个好处是编译器执行额外的检查。 编译器无法发现逻辑错误,这更重要但是编译器可以提前发现错误,动态语言只能在运行提示报错信息。

Zephir是静态和动态类型都允许使用的。

代码保护

在某些情况下,编译不显著提高性能,这可能是因为瓶颈所在。 在应用程序的I / O(很有可能),而不是计算/内存限制。 然而,编译代码也可能带来某种程度的intelectual保护您的应用程序。 Zephir产生本地二进制文件,你也有能力“隐藏”用户或客户的原始代码。

总结

Zephir不是用来取代PHP或C,相反我们认为这是一个补充,允许开发者进入代码编译和静态类型。Zephir正是试图加入从C和PHP的世界,美好的事物寻找机会使他们的应用程序更快!如果你喜欢PHP,如果你渴望执行效率,那就别犹豫赶快尝试一下Zephir吧!

-------------本文结束感谢您的阅读-------------