1. 程式人生 > 其它 >zephir-(12)php函式和異常處理

zephir-(12)php函式和異常處理

#zephir-php函式和異常處理#

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

經過了一個多月的學習,zephir的文件譯文和基礎講解也將近尾聲了,後面的內容最為重要也希望和大家一同更好的學習交流,本節的內容只要是講解zephir是怎麼時候PHP自帶的函式庫已經特德異常機制處理的,那麼讓我們開始本節的旅程把.

注:筆者水平有限,說的不正確的地方希望大家多多指正,一同交流技術

附上:

喵了個咪的部落格:w-blog.cn

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

github地址:https://github.com/phalcon/zephir

##php函式##

PHP有一個豐富的函式庫,您可以使用在你的擴充套件。 呼叫PHP函式只需正常使用它在你Zephir程式碼:

namespace MyLibrary;

class Encoder
{

    public function encode(var text)
    {
        if strlen(text) != 0 {
            return base64_encode(text);
        }
        return false;
    }
}

你可以呼叫使用者建立的php函式:

namespace MyLibrary;

class Encoder
{

    public function encode(var text)
    {
        if strlen(text) != 0 {
            if function_exists("my_custom_encoder") {
                return my_custom_encoder(text);
            } else {
                return base64_encode(text);
            }
        }
        return false;
    }
}

注意所有PHP函式只接收和返回動態變數。 如果你通過靜態型別變數作為引數,一個臨時的動態變數將自動被用作橋為了呼叫函式:

namespace MyLibrary;

class Encoder
{

    public function encode(string text)
    {
        if strlen(text) != 0 {
            return base64_encode(text);
        }
        return false;
    }
}

類似地,函式返回動態值不能直接分配給靜態變數:

namespace MyLibrary;

class Encoder
{

    public function encode(string text)
    {
        string encoded = "";

        if strlen(text) != 0 {
            let encoded = (string) base64_encode(text);
            return '(' . encoded . ')';
        }
        return false;
    }
}

Zephir動態提供了一種方法來呼叫函式,如:

namespace MyLibrary;

class Encoder
{

    public function encode(var callback, string text)
    {
        return {callback}(text);
    }
}

##異常處理##

Zephir實現異常在很低的水平,為PHP提供類似的行為和功能。

丟擲異常時,可以使用“捕捉”塊捕獲異常並允許 開發人員提供適當的處理。

try {

    //異常都可以在這裡丟擲
    throw new Exception("This is an exception");

} catch Exception, e {

    //處理異常
    echo e->getMessage();
}

Zephir提供了一直沒有反應的“try”,簡單地忽略任何異常在那塊:

try {
    throw new Exception("This is an exception");
}

一個“catch ”塊可以用來捕獲不同型別的異常:

try {

    //異常都可以在這裡丟擲
    throw new Exception("This is an exception");

} catch RuntimeException|Exception, e {

    //處理異常
    echo e->getMessage();
}

Zephir允許你把文字或靜態型別化變數當作異常的訊息:

throw "Test";   // throw new Exception("Test");
throw 't';      // throw new Exception((string) 't');
throw 123;      // throw new Exception((string) 123);
throw 123.123;  // throw new Exception((string) 123.123);

Zephir作為PHP的異常提供相同的設施,讓你知道發生了異常。 例外::getFile()和異常:getLine()返回位置Zephir程式碼已經被丟擲的異常:

Exception: The static method 'someMethod' doesn't exist on model 'Robots'
File=phalcon/mvc/model.zep Line=4042
#0 /home/scott/test.php(64): PhalconMvcModel::__callStatic('someMethod', Array)
#1 /home/scott/test.php(64): Robots::someMethod()
#2 {main}

##總結##

本節主要講解了,zephir可以直接使用PHP的函式庫並且可以直接呼叫PHP使用者定義的函式,其實這個是對PHP開發這最方便的一件事情,還有對異常處理進行了一些粗略的講解,那麼今天的zephir譯文和講解就到這裡了,多謝大家的支援!

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!

zephir技術交流:246348908 歡迎大家的加入!

感謝zephir開發人員: