首頁 > 後端開發 > php教程 > 使用PHP快速建立命令列應用程式的方法

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

小云云
發布: 2023-03-18 06:00:01
原創
1919 人瀏覽過

如果你是一名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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板