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

來源:互聯網
上載者:User

如果你是一名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 HelloWorldchmod +X HelloWorld
  • 將下面的代碼添加到HelloWorld檔案中(後面我將為每一行做註解),並在你的終端中執行HelloWorld這個應用程式.

    #!/usr/bin/env php<?phprequire __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;(new Application('Hello World', '1.0.0'))      ->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控制台程式

當沒有指定命令時,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不傳遞任何參數和選項

  1. greet有一個可選的name參數

  1. greet使用say選項自訂問候語

  1. 最後,greet自訂問候語和問候人

關於作者

程式開發人員,不拘泥於語言與技術,目前主要從事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 HelloWorldchmod +X HelloWorld
  • 將下面的代碼添加到HelloWorld檔案中(後面我將為每一行做註解),並在你的終端中執行HelloWorld這個應用程式.

    #!/usr/bin/env php<?phprequire __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;(new Application('Hello World', '1.0.0'))      ->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控制台程式

當沒有指定命令時,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不傳遞任何參數和選項

  1. greet有一個可選的name參數

  1. greet使用say選項自訂問候語

  1. 最後,greet自訂問候語和問候人

相關推薦:

PHP命令列

關於webpack命令列的詳細介紹

關於擷取命令列參數的7篇文章推薦

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.