thinkphp6笔记

  1. 命令行 参数类型分别有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只能单独配置。

    • 自带命令(待补充)

      help	# 帮助信息
      list	 # 命令列表
      clear	# 清除runtime缓存
      make:command	
      make:controller
      make:model
      make:middleware
      make:validate
      make:event
      make:listener
      make:service
      make:subscribe
      optimize:route
      optimize:schema
      run
      version
      route:list
      service:discover
      vendor:publish
  2. 服务

    • 很像一种前置化的hook,在应用运行前就执行服务。
    • 通过初始化器执行服务BootService。
    • 由于命令行也是通过应用加载,所以命令行也有服务。
  3. 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() 递归加载初始化器并init Error::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/
作者
icy8
发布于
2021年1月6日
许可协议