[Zephir官方文档翻译之三] 介绍 Zephir

介绍 Zephir

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

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

Hello World!

每一种语言都会有它们的"Hello World!"例子,对于Zehpir来说也不例外,下面的这个引导例子列举了许多它重要的特性。

Zephir的代码必须放置在类中。Zephir是基于面向对象类/框架打造的。所以代码放置在类的外面是不允许的。另外,一个命名空间 也是必须的:

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的新特性。

下面的例子很简单,它提供一个类和一个函数,检测一个数组的类型

让我们认真的检查下面的代码,开始认真的的学习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是 很相似的。


你可能感兴趣的:([Zephir官方文档翻译之三] 介绍 Zephir)