当前位置: 首页 > 后端技术 > PHP

【译文】HowtousePHPtoquicklybuildacommandlineapplication

时间:2023-03-29 20:42:05 PHP

原文地址:HowtobuildaCommandLineApplicationusingPHP?如果你是一名Web开发工程师,那么你一定用PHP开发过很多Web应用。但是你知道如何使用PHP快速构建命令行应用程序(工具)吗?下面我将向您展示如何使用PHP和一个著名的Composer扩展包——Symphony/Console来构建一个命令行应用程序。Symphony/Console是由Composer管理的PHP扩展包,它简化了创建美观且可测试的PHP命令行应用程序的过程。它提供开箱即用的参数,例如(可选/必需)规范和选项规范(使用-符号)等。所以,让我们一起开始构建我们的应用程序。像往常一样,我们将构建一个“HelloWorld”控制台应用程序,但对其进行一些修改,使其支持自定义问候语(而不是Hello),并且可以随意问候一个人(而不是world)。这个HelloWorld应用程序将执行以下操作:为我们提供一个greet命令,我们将使用该命令与应用程序进行交互。greet可以接受一个可选的参数(名字)来打印出一个被问候的人(默认是World)。greet可以接受一个选项(--say)来更改问候语(默认为Hello)。如果我们提供任何参数或选项,程序将默认输出一条HelloWorld消息。如何使用PHP构建命令行应用程序为我们的项目创建一个新目录并cd进入其中:mkdirhello-world-app&&cdhello-world-app使用Composer将控制台组件导入我们的项目composerrequiresymfony/consoleand然后对于为您的应用程序创建入口点,不需要PHP扩展,因为我们要使该文件可执行并在文件本身中指定环境。touchHelloWorldchmod+XHelloWorld将以下代码添加到HelloWorld文件中(稍后我将注释每一行),并在您的终端中执行HelloWorld应用程序。#!/usr/bin/envphpregister('greet')->addArgument('name',InputArgument::OPTIONAL,'人名')->addOption('say',null,InputOption::VALUE_REQUIRED,'自定义问候语')->setCode(function(InputInterface$input,OutputInterface$output){$name=$input->getArgument('name');$greeting=$input->getOption('say');if(!empty($name)&&!empty($greeting)){返回$output->writeln("$greeting$name!");}elseif(!empty($name)){return$output->writeln("Hello$name!");}elseif(!empty($greeting)){return$output->writeln("$greetingWorld!");}else{return$output->writeln("HelloWorld!");}})->getApplication()->run();看,这样,你就有了自己的HelloWorld控制台程序。当没有指定命令时,HelloWorld会默认输出一个信息屏幕来提示SymfonyConsole组件为我们提供几个开箱即用的应用程序。help、list、--version等选项和命令解释这个神奇文件的内容OK,我们来看一下我们的HelloWorld文件中的代码我们导入autoload.php来使用composer提供的autoload和console组件提供的功能.InputInterface和OutputInterface将使应用程序的输入和输出功能变得简单,而InputArgument和InputOption将帮助我们处理传递给HelloWorld应用程序的选项和参数。需要__DIR__.'/vendor/autoload.php';使用Symfony\Component\Console\Application;使用Symfony\Component\Console\Input\InputArgument;使用Symfony\Component\Console\Input\InputInterface;使用Symfony\Component\Console\Input\InputOption;使用Symfony\Component\Console\Output\OutputInterface;symphony/console通过名称HelloWorld(v1.0.0)实例化一个新应用程序,并注册我们的greet命令。(newApplication('HelloWorld','1.0.0'))->register('greet')我们添加一个可选的名称参数(addArgument())并提供参数的简短描述。然后,我们使用addOption()方法添加一个say选项。请注意,选项始终是可选的,但您可以指定要传递的值,或仅将其用作布尔标志。->addArgument('name',InputArgument::OPTIONAL,'Nameoftheperson')->addOption('say',null,InputOption::VALUE_REQUIRED,'Customgreeting')setCode()方法中的代码将包含我们的应用程序的主要逻辑,它会根据传递的参数和选项向终端打印一个问候语。我们监听$input对象,并使用getArgument()和getOption()辅助方法获取传递给greet的选项和参数。然后,我们只需要检查传递了哪些参数或选项,并相应地(使用$output对象)向控制台输出打印问候语。writeln()方法可以根据标签对文本进行格式化,比如输出不同颜色的info、error和warning。->setCode(function(InputInterface$input,OutputInterface$output){$name=$input->getArgument('name');$greeting=$input->getOption('say');if(!empty($name)&&!empty($greeting)){return$output->writeln("$greeting$name!");}elseif(!empty($name)){return$output->writeln("Hello$name!");}elseif(!empty($greeting)){return$output->writeln("$greetingWorld!");}else{return$output->writeln("HelloWorld!");}})最后我们引导应用程序并调用它的方法,以便它准备好接收和处理greet命令任何时候。->getApplication()->run();现在让我们看看HelloWorld程序的运行情况。greet不传递任何参数并且选项greet有一个可选的名称参数greet使用say选项自定义问候语最后,greet自定义Greetings和greetings关于作者程序开发人员,不限语言和技术,目前主要从事PHP和前端开发,使用Laravel和VueJs。适可而止是永无止境的追求。个人网站:https://www.linganmin.cn译者注:本文部分链接和图片地址已替换为国内地址。如有翻译错误请指正。快乐编码!