注入是Typecho-Framewrok的重要特性。注入写起来非常优雅,在性能上也有好处(避免了函数开销)。本文简要介绍如何使用Typecho-Framework的注入。如果你不太了解Typecho-Framework,请先参考Typecho Framework简介和Typecho Framework: Hello world!两篇文章。
注入的使用十分简单。
首先我们在入口程序中声明注入的配置文件:
Base::setInjectiveObjects(require(ROOT . '/config/injects.php'));
然后在配置文件config/injects.php
中绑定需要注入的对象:
returnarray(
'ending' => array('Hello\Service\Ending'),
);
这里我们将ending
绑定到Hello\Service\Ending
这个我们自行实现的类。
Ending类包含一个方法,该方法返回一个END
字符串:
namespace Hello\Service;
classEnding
{
publicfunctionendWord() {
return'END';
}
}
在Action中,我们只需声明ending
变量即可实现注入:
namespaceHello\Action;
useTE\Mvc\Action\AbstractAction;
/**
* Hello
*
* @use AbstractAction
*/
classhelloWorldextendsAbstractAction
{
private $ending;
publicfunctionexecute()
{
returnarray('content', 'Hello, world.' . $this->ending->endWord());
}
}
注入很爽吧?
注入会迷惑IDE。 比如,$this->ending->endWord()
这句,PHPStorm中输入$this->ending->
之后无法提示、补全方法了。PHPStorm中需要自动提示的话,需要额外使用@var
注明。(感谢suchasplus提供这个小窍门。)