thinkphp6笔记
命令行 参数类型分别有Option、Argument
长选项(Option)
例:--file=test.php
其中file为长命令名,test.php 为选项参数(值),选项值可以不带=号短选项/快捷选项(option->$shortcut)
例:-sCollect
其中s为短选项名 Collect为选项参数(值),参数值为可选。通常这种短选项是可以通过–访问的,通俗意义上的快捷方法,单字符且区分大小写。
一个长选项可以有多个快捷选项。
参数/裸命令(Argument)
php think swoole
其中swoole 为裸命令。- 参数模式为
Argument::REQUIRED
时,前面一定不能有可选参数,也就是必填参数必须置顶靠前。 - 参数模式为
Argument::IS_ARRAY
时,后面不能有任何独立参数,也就是数组参数必须是置后的。 - 参数模式默认为
Argument::OPTIONAL
。
- 参数模式为
php think opt1 opt2
通常opt1为指令名称(不带-号的第一个选项),可以为自定义的指令或自带指令
有指令名称时 –help会启动对应的指令帮助文档参数模式的位运算
自建命令配置多个模式用位或,如:
Option::VALUE_REQUIRED | Option::VALUE_IS_ARRAY
检测是否含有某个模式用位与,如:
self::VALUE_REQUIRED === (self::VALUE_REQUIRED & $this->mode)
Option::VALUE_NONE
只能单独配置。自带命令(待补充)
服务
- 很像一种前置化的hook,在应用运行前就执行服务。
- 通过初始化器执行服务BootService。
- 由于命令行也是通过应用加载,所以命令行也有服务。
think-swoole服务加载流程
- 文件
think
new App()->__construct()
,注册容器,初始化目录路径。
->console->run()` 初始化输入 输出 执行指令 - Console.php
initilize()
$app->initilize();
由此进入App.php,这里会检查是否已经app->initilize()
- App.php
- $this->load() 加载自定配置、自定服务,触发初始化事件hook
$this->make($initilizer)->init()
递归加载初始化器并initError::class
,RegisterService::class
,BootService::class
,Error->init()
错误和异常处理初始化RegisterService->init()
注册并加载系统硬服务PaginatorService::class
,ValidateService::class
,ModelService::class
RegisterService->init()
引入扩展硬服务rootPath/vendor/services.php
依赖安装可以改写这个文件,其中think-swoole依赖安装过程中就改写过这个文件。- 扩展硬服务和系统硬服务合并、注册。
BootService->init()
服务引导(执行),其中含括:think\\swoole\\Service->boot()
这个服务会通过swoole监听整个网络请求\think\Service->commands()
向控制台注册指令:think\swoole\command\Server as ServerCommand::class
,think\swoole\command\RpcInterface::class
,think\swoole\command\Rpc::class
。think\swoole\command\Server
向控制台注册一个名为swoole的指令,同时命令行的入口文件就是它。
- 文件
thinkphp6笔记
http://blog.icy8.cn/posts/17913/