先简单的定义一个命令,建立一个命令行测试类:

<php?
namespace app\base\command;
use think\console\Command;
use think\console\Input;
use think\console\Output;

class Test extends Command
{
    protected function configure()
    {
        $this->setName('test');//定义命令的名字
    }

    protected function execute(Input $input, Output $output)
    {
        $output->writeln('Hello World');//在命令行界面输出内容
    }
}

 

 

现在来说一下这2个方法的功能:

configure()
   用来设置自定义命令属性,可以配置命令名字、命令参数、命令选项、命令描述

 execute()
   用来设置执行命令的相关操作,通过Input,Output输入输出达到命令行和代码的交互。

 

配置命令

 设置完了自定义命令,还要在application/command.php中配置一下才行哦:

<php?
return [
        'app\base\command\Test'
    ];

一个命令对应一个命令类,对应一个配置。也就是说想定义多个命令,就需要建立多个类文件,每个定义的命令都要在这里配置才能生效。

到网站根目录,执行

php think

能查看所有可用的命令

执行

php think test

就会输出

Hello World

--------------------------------------------

命令参数

 上面的命令似乎只能执行一些简单的操作,这次我们给命令添加几个参数,增加命令的功能性。

<?php
    protected function configure()
    {
        $this->setName('test')                      //定义命令的名字
        ->setDescription('This is my command')     //定义命令的描述
        ->addArgument('name')                      //增加一个名字参数
        ->addArgument('age');                      //增加一个年龄参数
    }

    protected function execute(Input $input, Output $output)
    {
        //获取输入的参数
        $name = $input->getArgument('name');
        $age = $input->getArgument('age');

        //输出获得的参数
        $output->writeln("My name is $name ,age is $age");
    }

执行命令

php think test wuhen 20

获得

My name is wuhen,age is 20 的输出

---------------------------------------------------------------

命令选项
 我们的命令虽然可以传入参数了,不过可以增加 选项 进一步充分我们命令的功能。

<?php
    protected function configure()
    {
        $this->setName('calculate')                      //定义命令的名字
            ->setDescription('This is my command')      //定义命令的描述
            ->addArgument('number1')                    //参数1
            ->addArgument('number2')                    //参数2
            ->addOption('add')                          //定义相加的选项
            ->addOption('sub');                         //定义相减的选项
    }

    protected function execute(Input $input, Output $output)
    {
        //获取输入的2个参数
        $number1 = $input->getArgument('number1');
        $number2 = $input->getArgument('number2');
        
        //加法操作
        if($input->hasOption('add')){
            $result = $number1 + $number2;
            $output->writeln("$number1 + $number2 = $result");
        }
        
        //减法操作
        if($input->hasOption('sub')){
            $result = $number1 - $number2;
            $output->writeln("$number1 - $number2 = $result");
        }
    }

在命令行输入:

php think calculate 20 30 --add

可以看到返回 :

20 + 30 = 50

在命令行输入:

php think calculate 20 30 --sub

可以看到返回:

20 - 30 = -10

选项也是可以设置默认值和执行命令时添加值的,例如

<?php
protected function configure()
    {
        $this->setName('test')
            ->addOption(
                "port",
                null,
                Option::VALUE_REQUIRED,
                '',
                9501
            )
            ->setDescription('test is a test function ');
    }

    protected function execute(Input $input, Output $output)
    {
        $port = $input->getOption('port');
        $output->writeln("TestCommand:".$port);
    }

执行命令

php think test --port

或者执行命令

php think test --port=555

试试看吧

破罐子互摔