zephir-(2)安裝和初體驗

#zephir-安裝和初體驗#php

##前言## 先在這裏感謝各位zephir開源技術提供者c++

zephir主要是解決了PHP開發人員嘗試編寫和編譯PHP拓展所能執行的代碼的語言。這是一個支持動態/靜態類型的語言,熟悉PHP開發人員能夠很好的進行開發。zephir這個名字的主要來源是**(Zend Engine/PHP/Intermediate)**,今天首先介紹zephir的安裝,接着會對zephir進行一些語法上面的介紹,但願你們喜歡!git

注:筆者水平有限,說的不正確的地方但願你們多多指正,一同交流技術github

附上:編程

喵了個咪的博客:w-blog.cnjson

zephir官網地址:http://zephir-lang.com/小程序

github地址:https://github.com/phalcon/zephirc#

##1. zephir安裝##api

安裝Zephir,請遵循如下步驟:數組

###1.1 環境依賴###

zephir主要依賴於下面環境

  • gcc >= 4.x/clang >= 3.x
  • re2c 0.13或更高版本
  • gnu 3.81或更高版本
  • autoconf 2.31或更高版本
  • automake 1.14或更高版本
  • libpcre3
  • php開發工具-phpize

若是你使用Ubuntu,你能夠安裝所須要的包:

$ sudo apt-get update
$ sudo apt-get install git gcc make re2c php5 php5-json php5-dev libpcre3-dev

因爲Zephir是用PHP編寫的須要已經安裝了最新版本的PHP和它必須在您的控制檯可用:

$ php -v
PHP 5.6.5 (cli) (built: Jan 24 2015 20:04:31)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies

同時,確保你也安裝了PHP開發庫與PHP安裝:

$ phpize -v
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226

###1.2 安裝Zephir###

目前Zephir編譯器必須從Github克隆

$ git clone https://github.com/phalcon/zephir

運行Zephir安裝程序(編譯/建立解析器):

$ cd zephir
$ ./install-json
$ ./install -c

測試安裝:

zephir help

會獲得以下返回:

_____              __    _
/__  /  ___  ____  / /_  (_)____
  / /  / _ \/ __ \/ __ \/ / ___/
 / /__/  __/ /_/ / / / / / /
/____/\___/ .___/_/ /_/_/_/
         /_/

Zephir version 0.9.2a-dev

Usage: 
	command [options]

Available commands:
	install             Installs the extension (requires root password)
	builddev            Generate/Compile/Install a Zephir extension in development mode
	help                Displays this help
	build               Generate/Compile/Install a Zephir extension
	compile             Compile a Zephir extension
	stubs               Generates extension PHP stubs
	version             Shows the Zephir version
	init [namespace]    Initializes a Zephir extension
	fullclean           Cleans the generated object files in compilation
	api [--theme-path=/path][--output-directory=/path][--theme-options={json}|/path]Generates a HTML API
	generate            Generates C code from the Zephir code
	clean               Cleans the generated object files in compilation

Options:
	-f([a-z0-9\-]+)     Enables compiler optimizations
	-fno-([a-z0-9\-]+)  Disables compiler optimizations
	-w([a-z0-9\-]+)     Turns a warning on
	-W([a-z0-9\-]+)     Turns a warning off

注意:當前最新開發版本在0.9.2a-dev穩定版爲0.8.0b

##2 Zephir初體驗##

還記得在開篇那個Helloword例子嗎?咱們先來簡單介紹一下zephir編譯機制在對例子介紹一下zephir的語法

###2.1 編譯/解釋###

每一種語言都有它本身的「Hello World!」示例,在此ZEPHIR介紹性的例子展現了這種語言的一些重要特性。

在ZEPHIR代碼必須放在類。這種語言的目的是創建面向對象的庫/框架,所以代碼移出一類是不容許的。此外,須要一個名稱空間:

namespace Test;

class Hello
{
    public function say()
    {
        echo "Hello World!";
    }
}

一旦這類編譯它產生如下代碼gcc/clang/vc++:

EPHIR_INIT_CLASS(Test_Hello) {
    ZEPHIR_REGISTER_CLASS(Test, Hello, hello, test_hello_method_entry, 0);
    return SUCCESS;
}

PHP_METHOD(Test_Hello, say) {
    php_printf("%s", "Hello World!");
}

實際上,它預計不須要使用Zephir的開發人員必須知道或者理解C編譯器,然而開發人員使用Zephir的時候,若是你有任何經驗php內部或C語言自己的瞭解,將會有一個更清晰的瞭解在。

###2.2 進一步瞭解zephir的感受###

在下面的例子中,咱們將描述足夠的細節,因此你理解發生了什麼。 咱們的目標是給你一個編程在Zephir是什麼樣的感受。 咱們將探討的細節 功能在後續章節。

下面的例子很是簡單,它實現了一個類和一個小程序,檢查方法 一個數組的類型

讓咱們更詳細地解釋一下代碼,因此咱們能夠開始學習Zephir語法。 有不少細節在短短几行代碼! 咱們將解釋通常的想法:

namespace Test;

/**

  • MyTest (test/mytest.zep) / class MyTest { public function someMethod() { / 變量必須聲明 */ var myArray; int i = 0, length;

    /*建立一個數組 */
     let myArray = ["hello", 0, 100.25, false, null];
    
     /* 數組有多少個元素*/
     let length = count(myArray);
    
     /* 打印值類型 */
     while i < length {
         echo typeof myArray[i], "\n";
         let i++;
     }
    
     return myArray;

    } }

方法中,第一行使用「var」和「int」關鍵字用於聲明一個變量在當地範圍。 每個變量用於方法必須用其各自的類型聲明。 這個聲明不是可選的, 它幫助編譯器報告關於鍵入變量或變量的使用範圍 一般在運行時錯誤結束。

動態變量是用的var關鍵字來聲明。 這些變量能夠分配和從新分配 不一樣的類型。 另外一方面,咱們有「i」和「length」整數靜態類型的變量 只能有這種類型的值在整個程序執行。

與PHP相比,你不須要把美圓符號($)在變量名前面。

Zephir遵循相同的評論約定爲Java,c#、c++,等等。 / /註釋的一條線,而/ 註釋 /能夠跨行。默認變量是不可變的,這意味着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僅適用於動態變量,方法老是返回動態變量,這意味着若是一個 返回靜態類型的變量,在PHP的一面,你會獲得一個動態變量,可使用 在PHP代碼。

注意,內存是由編譯器自動管理的,因此你不須要分配或釋放 記憶像C,比PHP以相似的方式工做。

##3. 總結##

咱們來回顧一下zephir這個名字的來源是**(Zend Engine/PHP/Intermediate)**,今天主要介紹了zephir的安裝,和他的一些基本特性信息,在後面的章節將會進入正章,來從一步一步深刻了解zephir!

注:筆者能力有限有說的不對的地方但願你們可以指出,也但願多多交流!

zephir技術交流:246348908 歡迎你們的加入!

感謝zephir開發人員:

相關文章
相關標籤/搜索