Swoft2.0 框架源码阅读(一):Swoft2.0 运行的时候到底做了什么

Swoft 是一个基于 php swoole 构建的 mvc 框架,也是第一个使用到注解概念的框架. 第一次见到看到的时候,真的是被惊艳了到了.个人非常很喜欢.

所以这次就开读源码的坑!

项目启动时Swoft做了什么

我们知道,启动Swoft框架需要运行一个命令

sudo php bib/swoft http:start

在这个命令结束后,swoft就完成了所有程序的初始化,那么启动时到Swoft 到底做了写什么呢?首先进入项目文件app同级目录 bin 文件夹下有一个 swoft的文件, 这是由 phar 生成的一个可运行文件.内容是:

1
2
3
4
5
6
7
8
9
10
11
// Bootstrap
require_once __DIR__ . '/bootstrap.php';

\Swoole\Runtime::enableCoroutine();

Swoole\Coroutine::set([
'max_coroutine' => 300000,
]);

// Run application
(new \App\Application())->run();

功能很简单,自动加载文件,开启swoole携程,然后运行程序.

重要的是run方法,该方法在 swoft/framework/src/SwoftApplication.php 文件里.勒种的构造函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public function __construct(array $config = [])
{
// code .....

$processors = $this->processors();

$this->processor = new ApplicationProcessor($this);
$this->processor->addFirstProcessor(...$processors);

$this->init();

CLog::info('Project path is <info>%s</info>', $this->basePath);

// code ....
}

// code ....

protected function processors(): array
{
return [
new EnvProcessor($this),
new ConfigProcessor($this),
new AnnotationProcessor($this),
new BeanProcessor($this),
new EventProcessor($this),
new ConsoleProcessor($this),
];
}

// code ....

public function run(): void
{
if (!$this->beforeRun()) {
return;
}

$this->processor->handle();
}

此处一目了然 $this->processor->handle() 是把 processors 方法所返回的对象数组全部指向了一遍.从类文件命名我们可以看出程序初始化时

  • 初始化 env 文件相关
  • 初始化 config 相关
  • 初始化 Annotation(注解) 相关
  • 初始化 bean 相关
  • 初始化事件相关
  • 最后初始化控制台相关

关于env与config我们暂且不谈, 从下一篇文章开始我们直接进入 Annotation 也是 swoft 框架中亮点功能开始讲解