[Zephir官方文檔翻譯之三] 介紹 Zephir

介紹 Zephir

Zephir是一種可讓PHP開發者嘗試編寫和編譯能夠被PHP執行代碼的一種語言。它是動態/靜態類型,它的一些特性對於PHP 開發者來講是很是的類似的。php

Zephir的名字是取自Zend Engine/PHP/Intermediate的縮寫。建議發音爲zephyr相同。事實上Zephir的創造者發音爲zaefire_.c++

Hello World!

每一種語言都會有它們的"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的新特性。編輯器

下面的例子很簡單,它提供一個類和一個函數,檢測一個數組的類型函數

讓咱們認真的檢查下面的代碼,開始認真的的學習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是 很類似的。

相關文章
相關標籤/搜索