[Zephir官方文檔翻譯之五] 入門指導

入門指導

Zephir還有這本手冊,是爲了PHP開發者想開發C擴展並下降複雜度面打算的。php

咱們假設你有編程語言的基礎。咱們會在介紹的時候儘量的向PHP,C,Javascript等語言的特色來陳述。 若是你懂得這些語言中的某一種的話,咱們會指出它們來Zephir的類似點。固然其它的一些Zephir的新特性還有 不一樣點咱們也會一一介紹。git

檢測安裝狀況

若是你成功的安裝了Zephir,你能夠在命令行中執行下面的命令:github

$ zephir help

若是安裝正確的話,你會看到下面的提示:web

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

Zephir version 0.4.5a

Usage:    command [options]Available commands:
    build               Generate/Compile/Install a Zephir extension
    clean               Cleans the generated object files in compilation
    compile             Compile a Zephir extension
    full-clean          Cleans the generated object files in compilation
    generate            Generates C code from the Zephir code    help                Displays this help    init [namespace]    Initializes a Zephir extension
    install             Installs the extension (requires root password)
    version             Shows Zephir version

目錄結構

首先咱們要作的是創建一個基礎的項目結構,它爲咱們開發擴展提供了基本的結構。這裏,咱們創建了一個擴展叫作"utils":編程

$ zephir init utils

執行上面的命令後,一個名爲"utils"的目錄被創建在當前的目錄下:json

utils/
   ext/
   utils/

目錄 "ext/" (inside utils) 包含了編譯器將會用到來編譯擴展的代碼. 另外一個目錄是"utils",這個目錄的名字必需要和咱們的擴展名字保持一至。咱們寫的Zephir代碼將會被放到這裏。session

We need to change the working directory to "utils" to start compiling our code:框架

$ cd utils$ ls
ext/ utils/ config.json

列出的目錄中,還有一個文件叫作"config.json",這個文件包括了一些配置,它能夠用來改變Zephir和擴展的行爲。編程語言

增長咱們的第一個類

Zephir是被設計成開發面向對象擴展的。爲了開發出咱們的第一個功能,咱們增長一個類到擴展中。ide

就像不少工具和語言同樣,第一件事就是去寫"hello world"。同時也檢測Zephir是否是能夠正常運做。 因此咱們的第一個類就叫做"Utils\Greeting",它包含了一個函數,這個函數會打印出"hello world!"。

The code for this class must be placed in "utils/utils/greeting.zep":

namespace Utils;class Greeting{

    public static function say()
    {
        echo "hello world!";
    }}

下面開始編譯並生成擴展:

$ zephir build

首先,只會在第一次執行的時候,大量的內部命令被執行,併產生了一些必要的代碼和配置文件,最終把這個類生成PHP的擴展。 若是一切順利的話,你將會看到:

...Extension installed!Add extension=utils.so to your php.iniDon't forget to restart your web server

在上面的步驟中,你可能須要提供你的root賬號和密碼去安裝這個擴展。 最後,這個擴展必須增長到php.ini文件中,以便PHP能夠加載它: extension=utils.so

初始化測試

如今這個擴展已經增長到php.ini文件中了,執行下面的命令來確認擴展是否已經正確的加載進來了:

$ php -m[PHP Modules]Core
date
libxml
pcre
Reflection
session
SPL
standard
tokenizer
utils
xdebug
xml

擴展utils必需要出如今上面的列表中。那麼如今,咱們嘗試在PHP中運行這個hello world擴展。 爲了完成這個測試,咱們寫了一個簡單的PHP代碼來執行擴展中的靜態函數:

<?phpecho Utils\Greeting::say(), "\n";

恭喜!,你已經完成你的第一個PHP擴展了。

一些有用的類

"hello world"這個類的擴展是用來檢測咱們的不幸是否正確的。如今,讓咱們創建一些其它更有用處的類。

第一個有用的類咱們將要增長到PHP擴展中將會提供一個過濾工具給用戶。 這個類就叫作"Utils\Filter",這個類的代碼必需要放在"utils/utils/filter.zep"中:

這個類的基本的框架以下:

namespace Utils;class Filter{}

這個類包含了一個函數,這個函數的做用是幫助用戶去過濾一些不合法的字符。 第一個函數叫作"alpha",它的目標就是去過濾非ascii碼的字符。 開始,咱們只是簡單的打印出字符串的每個字節:

namespace Utils;class Filter{

    public function alpha(string str)
    {
        char ch;

        for ch in str {
            echo ch, "\n";
        }

    }}

當調用這個函數的時候:

<?php$f = new Utils\Filter();$f->alpha("hello");

You will see:

h
e
l
l
o

檢查字符串中的每個字符是一個直接了當的方法,如今咱們創建另外一個正確過濾字符的函數:

class Filter{

    public function alpha(string str) -> string
    {
        char ch; string filtered = "";

        for ch in str {
            if (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') {
                let filtered .= ch;
            }
        }

        return filtered;
    }}

這個寫好的函數能夠像剛纔同樣測試:

<?php$f = new Utils\Filter();echo $f->alpha("!he#02l3'121lo."); // prints "hello"

下面的視頻演示了上面的這些過程:

結論

這是一個簡單的指導教程,可是正如你所見到的,使用Zephir你能夠很容易的創建一個PHP擴展。 咱們建議你繼續閱讀這個手冊,以便你能夠了解更多Zephir的特性。

相關文章
相關標籤/搜索