Zephir是一种可让PHP开发者尝试编写和编译能够被PHP执行代码的一种语言。它是动态/静态类型,它的一些特性对于PHP 开发者来讲是很是的类似的。php
Zephir的名字是取自Zend Engine/PHP/Intermediate的缩写。建议发音为zephyr相同。事实上Zephir的创造者发音为zaefire_.c++
每一种语言都会有它们的"Hello World!"例子,对于Zehpir来讲也不例外,下面的这个引导例子列举了许多它重要的特性。git
Zephir的代码必须放置在类中。Zephir是基于面向对象类/框架打造的。因此代码放置在类的外面是不容许的。另外,一个命名空间 也是必须的:github
namespace Test;/** * This is a sample class */class Hello{ /** * This is a sample method */ public function say() { echo "Hello World!"; }}
一但这个类被编译完成,它会产生下面的一段C代码(gcc/clang/vc++编译):数组
#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "php.h"#include "php_test.h"#include "test.h"#include "kernel/main.h"/** * This is a sample class */ZEPHIR_INIT_CLASS(Test_Hello) { ZEPHIR_REGISTER_CLASS(Test, Hello, hello, test_hello_method_entry, 0); return SUCCESS;}/** * This is a sample method */PHP_METHOD(Test_Hello, say) { php_printf("%s", "Hello World!");}
事实上,使用Zephir的开发者无需懂得C语言,若是你有使用编译器,或者php内部的构造,或者C语言自己的经验, 在使用Zephir的时候你将会感到更加的清晰。框架
在接下来的例子中,咱们将会尽详细的描述,以便你知道是怎么回事。 咱们的目标是让你感受一下到底Zephir是怎么样的一个东西。 随便咱们将会详细的探索Zephir的新特性。编辑器
下面的例子很简单,它提供一个类和一个函数,检测一个数组的类型函数
让咱们认真的检查下面的代码,开始认真的的学习Zephir. 这几行代码包括了不少详细的东西,咱们将会慢慢的解释:学习
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; }}
在函数中,第一行使用了'var' 和 'int' 关键词来声明一个函数内的私有变量。 在函数中的每个变量必须事先声明它们本身的类型。这些声明并非随意的,它帮助编译器来报告给你关于 错误的变量,或者变量的使用是否超出的它的范围,一般它会在最后抛出错误。优化
动态的变量必须以关键词'var'来声明。这些变量能够被指定或再指定成不一样的变量类型。 另外一方面,'i' and 'length'使用了整数的静态变量,在执行程序的过程当中,它只能改变值,而不能改变变量的类型。
与PHP不一样的是,你不用在变量的前面加上($)符号。
Zephir的注释和Java, C#, C++等等一些语言的同样。例如: A //comment goes to the end of a line, while a /* comment */ can cross line boundaries.
默认的,变量是不变的,意思是说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的变量老是动态的,函数老是返回的是可变的动态变量,这就意味着若是一个静态变量在Zphir中被返回了,在PHP的调用中 你获得的倒是一个动态变量。请注意,内存是在编译器中自动管理的,因此你没有必要像C语言同样去分配和释放内存。这和PHP是 很类似的。