搜尋
首頁後端開發php教程使用PHP快速建立命令列應用程式的方法
使用PHP快速建立命令列應用程式的方法Dec 18, 2017 pm 04:15 PM
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)。

  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
    <?php require __DIR__.&#39;/vendor/autoload.php&#39;;
    
    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;
    
    (new Application(&#39;Hello World&#39;, &#39;1.0.0&#39;))
          ->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("<info>$greeting $name!</info>");
            } else if (!empty($name)) {
                return $output->writeln("<info>Hello $name!</info>");
            } else if (!empty($greeting)) {
                return $output->writeln("<info>$greeting World!</info>");
            } else {
                return $output->writeln("<info>Hello World!</info>");
            }
          })
          ->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("<info>$greeting $name!</info>");
        } else if (!empty($name)) {
            return $output->writeln("<info>Hello $name!</info>");
        } else if (!empty($greeting)) {
            return $output->writeln("<info>$greeting World!</info>");
        } else {
            return $output->writeln("<info>Hello World!</info>");
        }
      })
  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)。

  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
    <?php require __DIR__.&#39;/vendor/autoload.php&#39;;
    
    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;
    
    (new Application(&#39;Hello World&#39;, &#39;1.0.0&#39;))
          ->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("<info>$greeting $name!</info>");
            } else if (!empty($name)) {
                return $output->writeln("<info>Hello $name!</info>");
            } else if (!empty($greeting)) {
                return $output->writeln("<info>$greeting World!</info>");
            } else {
                return $output->writeln("<info>Hello World!</info>");
            }
          })
          ->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("<info>$greeting $name!</info>");
        } else if (!empty($name)) {
            return $output->writeln("<info>Hello $name!</info>");
        } else if (!empty($greeting)) {
            return $output->writeln("<info>$greeting World!</info>");
        } else {
            return $output->writeln("<info>Hello World!</info>");
        }
      })
  4. 最后我们引导应用程序并调用他的方法,以便他做好随时接收和处理greet命令。

    ->getApplication()
    ->run();

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

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

使用PHP快速建立命令列應用程式的方法

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

使用PHP快速建立命令列應用程式的方法

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

使用PHP快速建立命令列應用程式的方法

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

使用PHP快速建立命令列應用程式的方法

相关推荐:

PHP命令行

关于webpack命令行的详细介绍

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


以上是使用PHP快速建立命令列應用程式的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP实现MVVM架构:基本原理及应用PHP实现MVVM架构:基本原理及应用Jun 18, 2023 am 08:54 AM

随着Web应用程序的快速发展,越来越多的开发者将目光投向了各种新兴的Web开发框架和架构设计模式。其中一个备受瞩目的设计模式就是MVVM(ModelViewViewModel)架构模式。MVVM采用了一种现代化的设计模式,通过将UI和业务逻辑相分离,使得开发人员能够更好地管理和维护应用程序。此外,MVVM减少了不必要的耦合,提高了代码的可重用性和灵活性,

msedge.exe是什么应用程序msedge.exe是什么应用程序Sep 09, 2022 pm 02:37 PM

“msedge.exe”指的是“Microsoft Edge”网页浏览器软件;“Microsoft Edge”是由Microsoft开发的网页浏览器,该浏览器在2015年被正式命名,并且内置在了Windows10版本中;该浏览器与IE浏览器相比,Edge将支持现代浏览器功能,比如扩展。

卸载程序的文件名是什么卸载程序的文件名是什么Oct 21, 2022 pm 02:05 PM

卸载程序的文件名是“uninstall.exe”或“uninst.exe”,是用以协助使用者将软件自电脑中删除的一种电脑软件。使用方法:1、在文件资源管理器中挖掘并导航到应用程序EXE文件所在的文件路径;2、通过文件路径打开应用程序的安装目录,找到“uninstall.exe”文件;3、双击卸载文件“uninstall.exe”即可开始程序删除过程。

explorer.exe应用程序错误如何解决explorer.exe应用程序错误如何解决Jun 21, 2023 pm 02:14 PM

explorer.exe应用程序错误的解决办法:1、按下键盘上的“win”+“R”组合键,再打开的运行窗口中输入命“inetcpl.cpl”;2、在上方选择“高级”选项卡,在下方点击“重置”;3、在弹出来的窗口中,勾选“删除个人设置”,勾选后点击下面的“重置”。如果以上操作无法解决问题,请检查电脑是否有木马,这个时候建议重装系统,安装一个原版或者纯净版的系统。

如何修复 Windows 11 上的应用程序无法打开问题 [已解决]如何修复 Windows 11 上的应用程序无法打开问题 [已解决]May 02, 2023 pm 12:40 PM

微软最新发布的Windows11,已经证明是Windows10的更好版本,其结构变化、更人性化、重新排列的任务栏等。尽管Windows11是其中一个优秀的版本。许多Windows用户注意到他们的Windows11PC上存在一个不寻常的问题,他们无法启动大多数Windows11应用程序。无论他们尝试启动应用程序多少次,它只是简单地崩溃并且无法在系统上打开。突然发生这种情况可能有很多原因,下面列出了一些原因。Windows更新服务已停止。对系统的病毒攻击。系统上的用户帐户存

使用PHP和OpenLayers创建地图应用程序使用PHP和OpenLayers创建地图应用程序May 11, 2023 pm 08:31 PM

随着Internet的发展,越来越多的应用程序需要实现地图可视化展示。本文将介绍如何使用PHP和OpenLayers创建地图应用程序。一、OpenLayers介绍OpenLayers是一个JavaScript开源库,可以展示动态地图。除了展示标准的WMS、WFS和GoogleMaps,OpenLayers还可以展示自定义的地图,可以展示矢量数据,支持地图放

如何在 Windows 11 中重新安装邮件应用程序如何在 Windows 11 中重新安装邮件应用程序Apr 14, 2023 pm 03:19 PM

&lt;p&gt;&lt;strong&gt;邮件应用程序&lt;/strong&gt;是Windows11内置的一个非常有用的电子邮件客户端。它允许您从一个位置管理所有邮件帐户。虽然Mail应用程序非常有用,但有时可能需要重置,有时也需要重新安装,原因有多种。在本文中,我们将通过一些简单的步骤说明如何从Windows11轻松卸载Mail应用程序,以及如何轻松地从MicrosoftStore将其取回。&lt;/p&gt;&l

基于Django建立Web GIS应用程序基于Django建立Web GIS应用程序Jun 17, 2023 pm 01:12 PM

随着全球定位系统(GPS)和卫星影像技术的飞速发展,地理信息系统(GIS)已经成为了一个重要的应用领域。GIS不仅限于地图制作和分析,也被广泛应用于环境管理、土地管理、城市规划等领域。而WebGIS应用程序的开发,可以使得用户在任何地点、任何时间、通过任何设备进行GIS数据的查询、分析和管理,具有极大的应用前景。Django是一个基于Python语言的We

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),