注入是Typecho-Framewrok的重要特性。注入寫起來非常優雅,在性能上也有好處(避免了函數開銷)。本文簡要介紹如何使用
Typecho-Framework的注入。如果你不太了解Typecho-Framework,請先參考
Typecho Framework簡介和
Typecho Framework: Hello world!兩篇文章。
注入的使用十分簡單。
首先我們在入口程式中聲明注入的配置檔案:
Base::setInjectiveObjects(require(ROOT . '/config/injects.php'));
然後在配置檔案
config/injects.php
中綁定需要注入的對象:
return array(
'ending' => array('Hello\Service\Ending'),
);
這裡我們将
ending
綁定到
Hello\Service\Ending
這個我們自行實作的類。
Ending類包含一個方法,該方法傳回一個
END
字元串:
namespace Hello\Service;
class Ending
{
public function endWord() {
return 'END';
}
}
在Action中,我們隻需聲明
ending
變量即可實作注入:
namespace Hello\Action;
use TE\Mvc\Action\AbstractAction;
/**
* Hello
*
* @use AbstractAction
*/
class helloWorld extends AbstractAction
private $ending;
public function execute()
{
return array('content', 'Hello, world.' . $this->ending->endWord());
注入很爽吧?
注入會迷惑IDE。 比如,
$this->ending->endWord()
這句,PHPStorm中輸入
$this->ending->
之後無法提示、補全方法了。PHPStorm中需要自動提示的話,需要額外使用
@var
注明。(感謝
suchasplus提供這個小竅門。)