[TOC]
* * * * *
## 1 控制台源代码
(think/library/think/Console.php)方法列表
~~~
private $name;
private $version;
private $commands = [];
private $wantHelps = false;
private $runningCommand;
private $catchExceptions = true;
private $autoExit = true;
private $definition;
private $helperSet;
private $terminalDimensions;
private $defaultCommand;
~~~
`public function __construct($name = 'UNKNOWN', $version = 'UNKNOWN'){}`
`public function run(){}`
`public function doRun(Input $input, Output $output){}`
`public function setHelperSet(HelperSet $helperSet)`
`public function getHelperSet()`
`public function setDefinition(InputDefinition $definition){}`
`public function getDefinition(){}`
`public function getHelp(){}`
`public function setCatchExceptions($boolean){}`
`public function setAutoExit($boolean){}`
`public function getName(){}`
`public function setName($name){}`
`public function getVersion(){}`
`public function setVersion($version){}`
`public function getLongVersion(){}`
`public function register($name){}`
`public function addCommands(array $commands){}`
`public function get($name){}`
`public function has($name){}`
`public function getNamespaces(){}`
`public function findNamespace($namespace){}`
`public function find($name){}`
`public function all($namespace = null){}`
`public static function getAbbreviations($names){}`
`public function renderException(\Exception $e, Stream $output){}`
`protected function getTerminalWidth(){}`
`protected function getTerminalHeight(){}`
`public function getTerminalDimensions(){}`
`public function setTerminalDimensions($width, $height){}`
`protected function configureIO(Input $input, Output $output){}`
`protected function doRunCommand(Command $command, Input $input, Output $output){}`
`protected function getCommandName(Input $input){}`
`protected function getDefaultInputDefinition(){}`
`protected function getDefaultCommands(){}`
`protected function getDefaultCommands(){}`
`protected function getDefaultHelperSet(){}`
`private function getSttyColumns(){}`
`private function getConsoleMode(){}`
`private function getAbbreviationSuggestions($abbrevs){}`
`public function extractNamespace($name, $limit = null){}`
`private function findAlternatives($name, $collection){}`
`public function setDefaultCommand($commandName){}`
`private function stringWidth($string){}`
`private function splitStringByWidth($string, $width){}`
`private function extractAllNamespaces($name){}`
## 2 文件分析
### 1 成员变量
$name,$version:控制台的名称和版本号
$commands:指令集数组
$wantHelps:???
$runningCommand:当前运行指令
$catchException, autoExit:控制台运行状态控制
$defintion:输入参数定义
$helperSet:助手集
$terminalDimensions:终端尺寸
$defaultCommand:默认运行指令
* * * * *
### 2 public方法(30个)
`__construct()` 初始化控制台
> $name:控制台名称
> $version:控制台版本
* * * * *
`run()` 从输入获取指令并执行
* * * * *
`doRun()` 解析指令并运行
> $input:输入接口
> $output:输出接口
* * * * *
`setHelperSet() getHelperSet()` 设置和获取助手集
> $helperSet:助手集参数
* * * * *
`setDefinition() getDefinition()` 设置和获取输入参数定义
> $definition:输入参数定义
* * * * *
`getHelp()` 获取帮助信息
* * * * *
`setCatchExceptions()` 是否捕获异常
> $boolean: 设置控制台参数$catchExceptions
* * * * *
`setAutoExit()` 是否自动退出
> $boolean: 设置控制台参数$autoExit
* * * * *
`getName() setName() `获取和设置控制台名称
> $name:控制台名称参数$name
* * * * *
`getVersion() setVersion()` 获取和设置控制台版本
> $version:控制台版本参数$version
* * * * *
`getLongVersion()` 获取完整版本的号
添加和获取指令
* * * * *
`register() addCommands() add() get()
has() find() all()
getAbbreviations()`
> $name 指令名称
* * * * *
`getNamespaces() findNamespace()` 获取命名空间信息
* * * * *
`getTerminalDimensions()
setTerminalDimensions()` 获取和设置终端尺寸信息
* * * * *
`renderException()` 输出异常信息
* * * * *
`extractNamespace()` 返回指令命名空间部分
* * * * *
`setDefaultCommand()` 设置默认的指令
* * * * *
### 3 protected方法(9个)
`getTerminalWidth() getTerminalHeight() ` 获取终端宽度和高度
* * * * *
`configureIO()` 配置输入和输出对象
* * * * *
`doRunCommand()` 运行指令
* * * * *
`getCommandName()` 获取指令的基础名称
* * * * *
`getDefaultInputDefinition()` 获取默认输入定义
* * * * *
`getDefaultCommands()` 设置默认命令
* * * * *
`getDefaultHelperSet()` 设置默认助手
* * * * *
`getSttyColumns()` 获取stty列数
### 4 Private 私有方法(6个)
`getConsoleMode()` 获取终端模式
`getAbbreviationSuggestions()` 获取可能的建议
`findAlternatives()` 查找可替代的建议
`stringWidth()` 字符串长度
`splitStringByWidth()` 字符串切割
`extractAllNamespaces()` 返回所有命名空间
## 3 控制台的使用
### 3-1 添加命令配置
添加需要执行的命令类名
~~~
application\command.php
return ['think\console\command\Test'];
~~~
### 3-2 命令执行实现
命令类的实现
继承think\console\command类
实现 configure() execute()方法
~~~
thinkphp\library\think\console\command\Test.php
namespace think\console\command;
use think\console\Input;
use think\console\Output;
class Test extends Command
{
protected function configure()
{
$this->setName('test')
->setDescription('Command Test');
}
protected function execute(Input $input, Output $output)
{
$output->writeln("TestCommand:");
}
}
~~~
### 3-3 控制台入口测试
1 打开命令,进入框架根目录(console文件所在目录)
![](https://box.kancloud.cn/2016-03-28_56f8de1ba5a04.jpg)
2 输入测试命令 php console test
![](https://box.kancloud.cn/2016-03-28_56f8de1bba43b.jpg)
3 输出结果
![](https://box.kancloud.cn/2016-03-28_56f8de1bcfe67.jpg)
4 在命令实现文件的execute()中添加相应功能即可
## 4 总结
控制台是tp5新的功能。
其接口是 Console.php文件,
9个成员变量
30个public方法
9个protected方法
6个private方法
实现在[D:(\concole\)控制台](http://www.kancloud.cn/zmwtp/tp5/120858)目录