0

0

使用PHP快速构建命令行应用程序的方法

小云云

小云云

发布时间:2017-12-18 16:15:01

|

2167人浏览过

|

来源于php中文网

原创

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

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

千博购物系统.Net
千博购物系统.Net

千博购物系统.Net能够适合不同类型商品,为您提供了一个完整的在线开店解决方案。千博购物系统.Net除了拥有一般网上商店系统所具有的所有功能,还拥有着其它网店系统没有的许多超强功能。千博购物系统.Net适合中小企业和个人快速构建个性化的网上商店。强劲、安全、稳定、易用、免费是它的主要特性。系统由C#及Access/MS SQL开发,是B/S(浏览器/服务器)结构Asp.Net程序。多种独创的技术使

下载

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

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

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

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

    立即学习PHP免费学习笔记(深入)”;

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

  4. 如果我们么样给定参数或者选项,程序将默认输出一个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控制台程序使用PHP快速构建命令行应用程序的方法当没有指定命令时,HelloWorld默认输出一屏信息提示

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

解释这个神奇的文件内容

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

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

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

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

use Symfony\Component\Console\Application; 
use Symfony\Component\Console\Input\InputArgument; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Input\InputOption; 
use Symfony\Component\Console\Output\OutputInterface;
  1. symphony/console通过名称实例化一个新的应用程序HelloWorld (v1.0.0) ,并注册我们的greet命令。

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

    ->addArgument('name', InputArgument::OPTIONAL, 'Name of the person') 
    ->addOption('say', null, InputOption::VALUE_REQUIRED, 'Custom greeting')
  3. 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!");
        }
      })
  4. 最后我们引导应用程序并调用他的方法,以便他做好随时接收和处理greet命令。

    ->getApplication()
    ->run();

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

  1. greet不传递任何参数和选项

使用PHP快速构建命令行应用程序的方法

  1. greet有一个可选的name参数

使用PHP快速构建命令行应用程序的方法

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

使用PHP快速构建命令行应用程序的方法

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

使用PHP快速构建命令行应用程序的方法


关于作者

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

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

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

原文地址: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应用程序将会有如下功能:

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

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

    立即学习PHP免费学习笔记(深入)”;

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

  4. 如果我们么样给定参数或者选项,程序将默认输出一个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控制台程序使用PHP快速构建命令行应用程序的方法当没有指定命令时,HelloWorld默认输出一屏信息提示

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

解释这个神奇的文件内容

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

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

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

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

use Symfony\Component\Console\Application; 
use Symfony\Component\Console\Input\InputArgument; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Input\InputOption; 
use Symfony\Component\Console\Output\OutputInterface;
  1. symphony/console通过名称实例化一个新的应用程序HelloWorld (v1.0.0) ,并注册我们的greet命令。

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

    ->addArgument('name', InputArgument::OPTIONAL, 'Name of the person') 
    ->addOption('say', null, InputOption::VALUE_REQUIRED, 'Custom greeting')
  3. 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!");
        }
      })
  4. 最后我们引导应用程序并调用他的方法,以便他做好随时接收和处理greet命令。

    ->getApplication()
    ->run();

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

  1. greet不传递任何参数和选项

使用PHP快速构建命令行应用程序的方法

  1. greet有一个可选的name参数

使用PHP快速构建命令行应用程序的方法

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

使用PHP快速构建命令行应用程序的方法

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

使用PHP快速构建命令行应用程序的方法

相关推荐:

PHP命令行

关于webpack命令行的详细介绍

关于获取命令行参数的7篇文章推荐

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
excel制作动态图表教程
excel制作动态图表教程

本专题整合了excel制作动态图表相关教程,阅读专题下面的文章了解更多详细教程。

20

2025.12.29

freeok看剧入口合集
freeok看剧入口合集

本专题整合了freeok看剧入口网址,阅读下面的文章了解更多网址。

65

2025.12.29

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2025.12.29

python中def的用法大全
python中def的用法大全

def关键字用于在Python中定义函数。其基本语法包括函数名、参数列表、文档字符串和返回值。使用def可以定义无参数、单参数、多参数、默认参数和可变参数的函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

python改成中文版教程大全
python改成中文版教程大全

Python界面可通过以下方法改为中文版:修改系统语言环境:更改系统语言为“中文(简体)”。使用 IDE 修改:在 PyCharm 等 IDE 中更改语言设置为“中文”。使用 IDLE 修改:在 IDLE 中修改语言为“Chinese”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

C++的Top K问题怎么解决
C++的Top K问题怎么解决

TopK问题可通过优先队列、partial_sort和nth_element解决:优先队列维护大小为K的堆,适合流式数据;partial_sort对前K个元素排序,适用于需有序结果且K较小的场景;nth_element基于快速选择,平均时间复杂度O(n),效率最高但不保证前K内部有序。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

12

2025.12.29

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

134

2025.12.29

抖音网页版入口在哪(最新版)
抖音网页版入口在哪(最新版)

抖音网页版可通过官网https://www.douyin.com进入,打开浏览器输入网址后,可选择扫码或账号登录,登录后同步移动端数据,未登录仅可浏览部分推荐内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

63

2025.12.29

快手直播回放在哪看教程
快手直播回放在哪看教程

快手直播回放需主播开启功能才可观看,主要通过三种路径查看:一是从“我”主页进入“关注”标签再进主播主页的“直播”分类;二是通过“历史记录”中的“直播”标签页找回;三是进入“个人信息查阅与下载”里的“直播回放”选项。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

18

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 7.6万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.1万人学习

Django 教程
Django 教程

共28课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号