zephir-(8)類和對象1

#zephir-類和對象1#git

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

zephir全面使用對象編程,這就是爲何拓展的使用方式只能是方法和類,你也將看到,大部分的時間,運行時錯誤引起異常,而不是致命錯誤或警告。今天講一步步講解zephir類方法變量範圍等等的使用,但願你們喜歡.編程

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

附上:數組

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

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

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

##Class##對象

每一個Zephir文件必須實現一個類或一個接口(只能一個)。類的結構很是相似於PHP的一個類:blog

namespace Test;

/**
 * 這是一個示例類
 */
class MyClass
{

}

##類的修飾符##

支持下面的類修飾符:

Final:這個類不能被extended:

namespace Test;

/**
 * 他的類不能被另外一個類extended
 */
final class MyClass
{

}

Abstract:這個類不能被實例化:

namespace Test;

/**
 * 這個類不能被實例化
 */
abstract class MyClass
{

}

##類的方法##

「function」關鍵字引入了一個方法。通常的方法都實現了可見性的定義,每一個方法都必須設置可見性這是zephir強制的:

namespace Test;

class MyClass
{

    public function myPublicMethod()
    {
        // ...
    }

    protected function myProtectedMethod()
    {
        // ...
    }

    private function myPrivateMethod()
    {
        // ...
    }
}

方法能夠接收必需和可選參數:

namespace Test;

class MyClass
{

    /**
     * 全部參數是必需的
     */
    public function doSum1(a, b)
    {
        return a + b;
    }

    /**
     * 只有「a」是必需的,「b」是可選的,它有一個默認值
     */
    public function doSum2(a, b = 3)
    {
        return a + b;
    }

    /**
     * 這兩個參數是可選的
     */
    public function doSum3(a = 1, b = 2)
    {
        return a + b;
    }

    /**
     * 參數須要和它們的值必須是整數
     */
    public function doSum4(int a, int b)
    {
        return a + b;
    }

    /**
     * 靜態類型的默認值
     */
    public function doSum4(int a = 4, int b = 2)
    {
        return a + b;
    }
}

##可選參數能夠爲空##

這個編譯器保證當一個變量是null值時,Zephir會把null轉換成最接近的值:

public function foo(int a = null)
{
    echo a; // 「打印0
}

public function foo(boolean a = null)
{
    echo a; // 打印false
}

public function foo(string a = null)
{
    echo a; // 打印空字符串
}

public function foo(array a = null)
{
    var_dump(a); // 打印空數組
}

##可見性##

  • Public:方法標記爲「Public」,這意味着公共方法都能使用它。
  • Protected:方法標記爲「Protected」,這意味着只能調用在類中或類繼承中被調用。
  • Private:方法標記爲「Private」,這意味着私有方法僅對當前類使用。

##可修改性##

  • Final:若是一個方法使用了這個修飾符將不能被重載
  • Deprecated:方法標記爲「Deprecated」拋出E_DEPRECATED錯誤時調用。

##Getter/Setter 快捷操做##

在c#中,您可使用get / set / toString Zephir-shortcuts,該特性容許輕鬆地編寫setter和getter屬性而不用明顯的去實現這些方法。

例如,沒有捷徑,咱們能找到的代碼:

namespace Test;

class MyClass
{
    protected myProperty;

    protected someProperty = 10;

    public function setMyProperty(myProperty)
    {
        this->myProperty = myProperty;
    }

    public function getMyProperty()
    {
        return this->myProperty;
    }

    public function setSomeProperty(someProperty)
    {
        this->someProperty = someProperty;
    }

    public function getSomeProperty()
    {
        return this->someProperty;
    }

    public function __toString()
    {
        return this->myProperty;
    }

 }

您可使用shortcuts寫相同的代碼以下:

namespace App;

class MyClass
{
    protected myProperty {
        set, get, toString
    };

    protected someProperty = 10 {
        set, get
    };

}

當代碼編譯這些方法導出爲真正的方法,但你不須要把它們寫一個接一個。

##返回類型提示##

類和接口中的方法能夠返回類型提示,這些將爲編譯器提供有用的額外信息 通知您關於您的應用程序中的錯誤。 參考下面的例子:

namespace App;

class MyClass { public function getSomeData() -> string { // 這將拋出一個編譯器異常 // 返回值以來(boolean)不匹配 // 預期的返回類型爲string return false; }

public function getSomeOther() -> <App\MyInterface>
{
	// 這將拋出一個編譯器異常
	// 若是沒有實現返回的對象
	// 預期的結果是App\MyInterface
    return new App\MyObject;
}

public function process()
{
    var myObject;

    //類型,提示會告訴編譯器
    // myObject是一個類的實例
    // 實現應用 App\MyInterface
    let myObject = this->getSomeOther();

    // 若是使用App\MyInterface編譯器將檢查
    // 實現了一個名爲「someMethod」的方法
    echo myObject->someMethod();
}

}

##返回類型:Void##

方法也能夠標記爲「Void」。 這意味着一個方法不容許返回任何數據:

public function setConnection(connection) -> void
{
    let this->_connection = connection;
}

這是爲何有用嗎?由於若是程序指望從這些方法的返回值,編譯器能夠檢測和產生一個編譯器異常:

let myDb = db->setConnection(connection);
myDb->execute("SELECT * FROM robots"); // 這將產生一個異常

##總結##

應爲確實zephir的類方法這一塊的類容比較多,筆者在這裏分紅兩個小節進行說明,多謝你們的支持!

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

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

感謝zephir開發人員:

相關文章
相關標籤/搜索