Blink對(duì)象配置

2018-11-25 21:59 更新

Blink屬性和配置

Blink屬性和配置的設(shè)計(jì)借鑒于 Yii 框架,Blink 實(shí)現(xiàn)的 Yii 框架中該特性的子集,如果您對(duì) Yii 的這套理念熟悉,本節(jié)只需簡單看看即可。如果不熟,您也可以參考 Yii 的相關(guān)文檔 獲得更詳細(xì)的信息。

Blink屬性

Blink 利用 PHP 的魔術(shù)方法實(shí)現(xiàn)了增強(qiáng)版的對(duì)象屬性,通過增強(qiáng)版的屬性實(shí)現(xiàn),我們可以在讀或者寫屬性的時(shí)候執(zhí)行一些自定義的代碼。Blink 通過 blink\core\Object 這個(gè)類來提供這一特性,它通過定義類的 getter and setter 方法來定義這種屬性,如果一個(gè)類需要這種功能,我們只需要 繼承 blink\core\Object 類或者他的子類即可。

在下面的實(shí)例中,我們通過定義 getLabel() 和 setLabel() 兩個(gè)方法定義了 label 這個(gè)屬性。相比 PHP 原生提供的屬性,該屬性可以在設(shè)置它的值時(shí) 自動(dòng)調(diào)用 trim 函數(shù),實(shí)現(xiàn)自定義代碼注入:

use blink\core\Object;

class Foo extends Object
{
    private $_label;

    public function getLabel()
    {
        return $this->_label;
    }

    public function setLabel($value)
    {
        $this->_label = trim($value);
    }
}

我們也可以只定義 getter 方法而不定義 setter 方法,這樣的屬性叫做 read only 屬性,如果對(duì)該類屬性賦值會(huì)觸發(fā)blink\core\InvalidCallException 異常;同樣的,只定義 setter 方法而不定義 getter 方法的屬性叫做 write only 屬性,如果嘗試讀取該類屬性值也會(huì)觸發(fā)異常。

除了繼承 blink\core\Object 這個(gè)類,Blink 也提供 blink\core\ObjectTrait 和 blink\core\Configure 接口,通過使用他們, 我們可以很容易的讓第三方庫的代碼與 Blink 兼容,使用 Blink 提供的 屬性和配置 的特性。

Blink配置

配置在 Blink 中廣泛應(yīng)用于對(duì)象創(chuàng)建和初始化已有對(duì)象。一個(gè)配置通常包含待創(chuàng)建對(duì)象的類名和一系列用于初始化該對(duì)象屬性的值。下面是一個(gè)采用配置創(chuàng)建和 初始化 log 服務(wù)的例子:

$config = [
    'class' => 'blink\session\Manager',
    'expires' => 3600 * 24 * 15,
    'storage' => [
        'class' => 'blink\session\FileStorage',
        'path' => 'path/to/sessions'
    ]
];
$session = make($config);

make() 函數(shù)是一個(gè)采用配置快速創(chuàng)建對(duì)象的輔助函數(shù),他先根據(jù)配置里包含的類名創(chuàng)建對(duì)象,然后再初始化對(duì)象的其他屬性。

Blink配置格式

一個(gè)配置的格式如下:

[
    'class' => 'ClassName',
    'propertyName' => 'propertyValue',
    // 更多的屬性
]

其中:

  • class 元素指定待創(chuàng)建對(duì)象的類名
  • propertyName 元素用于初始化對(duì)象對(duì)應(yīng)的屬性,key 是屬性名稱,value 是屬性的初始值。注意,只有公開的成員變量和通過 getter 和 setter 定義的屬性可以被配置。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)