资讯专栏INFORMATION COLUMN

【译】如何使用PHP快速构建命令行应用程序

岳光 / 482人阅读

摘要:但是你知道如何使用快速构建一个命令行应用程序工具吗下面我将向您展示如何使用和一个著名的的扩展包构建一个命令行应用。这个应用程序将会有如下功能为我们提供一个多带带的问候命令,我们将使用它来与应用程序交互。

原文地址:How to build a Command Line Application using PHP?

如果你是一名Web开发工程师,那么你一定使用PHP开发过很多Web应用程序。但是你知道如何使用PHP快速构建一个命令行应用程序(工具)吗?下面我将向您展示如何使用PHP和一个著名的的Composer扩展包--Symphony/Console构建一个命令行应用。

Symphony/Console是一个使用Composer管理的PHP扩展包,它简化了创建一个漂亮的、可测试的PHP命令行应用的过程,它提供了开箱即用的诸如(可选/必选的)参数规范和选项规范(使用-符号)等功能。那么,我们来一起开始构建我们的应用。

按照惯例,我们将构建一个“Hello World”的控制台应用程序,但是要稍微修改一下它,让它支持自定义问候语(代替Hello),并且可以随意的去问候一个人(代替world)。

这个Hello World应用程序将会有如下功能:

为我们提供一个多带带的greet(问候)命令,我们将使用它来与应用程序交互。

greet可以接受一个可选的参数(name)来打印出一个被问候的人(默认是World)。

greet可以接受一个选项(--say)来更改问候语(默认是Hello)。

如果我们么样给定参数或者选项,程序将默认输出一个Hello World消息。

如何使用PHP构建命令行应用程序

为我们的项目创建新的目录并cd进入它:

mkdir hello-world-app && cd hello-world-app

使用Composer将控制台组件引入我们项目

composer require symfony/console

然后为你的应用程序创建一个入口点,PHP扩展不是必需的,因为我们要使这个文件成为可执行文件,并在文件本身中指定环境。

touch HelloWorld
chmod +X HelloWorld 

将下面的代码添加到HelloWorld文件中(后面我将为每一行做注解),并在你的终端中执行HelloWorld这个应用程序.

#!/usr/bin/env php
register("greet")
      ->addArgument("name", InputArgument::OPTIONAL, "Name of the person")
      ->addOption("say", null, InputOption::VALUE_REQUIRED, "Custom greeting")
      ->setCode(function (InputInterface $input, OutputInterface $output) {
              
        $name = $input->getArgument("name");
        $greeting = $input->getOption("say");

        if (!empty($name) && !empty($greeting)) {
            return $output->writeln("$greeting $name!");
        } else if (!empty($name)) {
            return $output->writeln("Hello $name!");
        } else if (!empty($greeting)) {
            return $output->writeln("$greeting World!");
        } else {
            return $output->writeln("Hello World!");
        }
      })
      ->getApplication()
      ->run();

看,就这样,你拥有了自己的HelloWorld控制台程序

当没有指定命令时,HelloWorld默认输出一屏信息提示

Symfony Console组件给我们提供的应用程序有几个开箱可用的选项的和命令,比如helplist--version

解释这个神奇的文件内容

OK,让我们来看看我们的HelloWorld文件中的代码。

我们引入autoload.php以使用由composer提供的自动加载以及控制台组件提供的各功能。

InputInterfaceOutputInterface将使应用程序的输入和输出功能变得简单,InputArgumentInputOption将帮助我们处理传递给我们HelloWorld应用程序的选项和参数。

require __DIR__."/vendor/autoload.php"; 

use SymfonyComponentConsoleApplication; 
use SymfonyComponentConsoleInputInputArgument; 
use SymfonyComponentConsoleInputInputInterface; 
use SymfonyComponentConsoleInputInputOption; 
use SymfonyComponentConsoleOutputOutputInterface;

symphony/console通过名称实例化一个新的应用程序HelloWorld (v1.0.0) ,并注册我们的greet命令。

(new Application("Hello World", "1.0.0"))
    ->register("greet")

我们添加一个可选的name参数(addArgument()),并提供参数的简短描述。然后,我们使用这个addOption()方法添加一个say选项。请注意,选项始终是可选的,但您可以指定要传递的值,也可以仅仅将其用作指boolean标识。

->addArgument("name", InputArgument::OPTIONAL, "Name of the person") 
->addOption("say", null, InputOption::VALUE_REQUIRED, "Custom greeting")

setCode()方法中的代码会包含我们应用程序的主逻辑,它会根据传递的参数和选项打印一个问候语到终端。我们监听$input对象,使用getArgument()getOption()辅助方法获取传递给greet的选项和参数,然后,我们只需要检查传递了哪些参数或者选项,并相应的(使用$output对象)向控制台输出打印问候语。这个writeln()方法可以根据标签格式化文本,比如输出不同颜色的info,errorwarning

->setCode(function (InputInterface $input, OutputInterface $output) {
    $name = $input->getArgument("name");
    $greeting = $input->getOption("say");

    if (!empty($name) && !empty($greeting)) {
        return $output->writeln("$greeting $name!");
    } else if (!empty($name)) {
        return $output->writeln("Hello $name!");
    } else if (!empty($greeting)) {
        return $output->writeln("$greeting World!");
    } else {
        return $output->writeln("Hello World!");
    }
  })

最后我们引导应用程序并调用他的方法,以便他做好随时接收和处理greet命令。

->getApplication()
->run();

现在让我们在实例中看看我们HelloWorld程序

greet不传递任何参数和选项

greet有一个可选的name参数

greet使用say选项自定义问候语

最后,greet自定义问候语和问候人


关于作者
程序开发人员,不拘泥于语言与技术,目前主要从事PHP和前端开发,使用Laravel和VueJs。合适和够用是永不停息的追求。

个人网站:https://www.linganmin.cn

译者注:本文中的部分链接和图片地址已更换为国内地址,如有翻译错误请多指正。
Happy Coding!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26222.html

相关文章

  • PHP:40+开发工具推荐

    摘要:今天,就为开发者介绍个方便的工具。对开发者来说,是一个非常有用的工具,它提供了超过个有用的函数。该工具检查输入源代码和报告任何违反给定的标准。框架是一个开发的工具。它侧重于安全性和性能,绝对是最安全的开发框架之一。 PHP是为Web开发设计的服务器脚本语言,但也是一种通用的编程语言。超过2.4亿个索引域使用PHP,包括很多重要的网站,例如Facebook、Digg和WordPress。...

    dreambei 评论0 收藏0
  • [] 使用 Sami 生成 PHP 文档

    摘要:原文地址为方法类函数生成文档已经成为了程序员的习惯所以需要知道通过源代码生成独立的文档本文中我会介绍一款新的文档生成工具什么是是插入到类接口方法属性顶部的多行注释为了阐明这个我们看下中的代码片段开始于结束于每行之间使用当定义一个类属性或者 原文地址: Generating PHP Documentation with Sami 为方法, 类, 函数生成文档已经成为了程序员的习惯, 所以...

    banana_pi 评论0 收藏0
  • 」JavaScript 究竟是如何工作的?(第一部分)

    摘要:文章的第二部分涵盖了内存管理的概念,不久后将发布。的标准化工作是由国际组织负责的,相关规范被称为或者。随着分析器和编译器不断地更改字节码,的执行性能逐渐提高。 原文地址:How Does JavaScript Really Work? (Part 1) 原文作者:Priyesh Patel 译者:Chor showImg(https://segmentfault.com/img...

    Youngdze 评论0 收藏0
  • 如何编写一个独立的 PHP 扩展(

    摘要:独立的扩展可以独立于源码之外进行分发。定义一个新扩展我们给示例扩展命名为。对于一个独立扩展来说,你只需要做一些宏调用即可。通过以上的步骤,你已经有了一个独立的扩展了。 本文翻译自 PHP 源码中的 README.SELF-CONTAINED-EXTENSIONS。文中标记了 注 的内容均为自己添加。内容有点老,也挺啰嗦,没讲什么深入的内容,但是可以作为入门学习参考。 独立的 PHP 扩...

    JerryZou 评论0 收藏0
  • SegmentFault 技术周刊 Vol.40 - 2018,来学习一门新的编程语言吧!

    摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...

    caspar 评论0 收藏0

发表评论

0条评论

岳光

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<