Blink屬性和配置的設(shè)計(jì)借鑒于 Yii 框架,Blink 實(shí)現(xiàn)的 Yii 框架中該特性的子集,如果您對(duì) Yii 的這套理念熟悉,本節(jié)只需簡單看看即可。如果不熟,您也可以參考 Yii 的相關(guān)文檔 獲得更詳細(xì)的信息。
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 中廣泛應(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ì)象的其他屬性。
一個(gè)配置的格式如下:
[
'class' => 'ClassName',
'propertyName' => 'propertyValue',
// 更多的屬性
]
其中:
更多建議: