1

注入是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提供这个小窍门。)


撰文 SegmentFault


weakish
24.6k 声望844 粉丝

a vigorously lazy deadbeat with matured immaturity