摘要:但是你知道如何使用快速構建一個命令行應用程序工具嗎下面我將向您展示如何使用和一個著名的的擴展包構建一個命令行應用。這個應用程序將會有如下功能為我們提供一個多帶帶的問候命令,我們將使用它來與應用程序交互。
原文地址: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組件給我們提供的應用程序有幾個開箱可用的選項的和命令,比如help,list和--version
解釋這個神奇的文件內容OK,讓我們來看看我們的HelloWorld文件中的代碼。
我們引入autoload.php以使用由composer提供的自動加載以及控制臺組件提供的各功能。
InputInterface和OutputInterface將使應用程序的輸入和輸出功能變得簡單,InputArgument和InputOption將幫助我們處理傳遞給我們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,error和warning。
->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!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26222.html
摘要:今天,就為開發者介紹個方便的工具。對開發者來說,是一個非常有用的工具,它提供了超過個有用的函數。該工具檢查輸入源代碼和報告任何違反給定的標準。框架是一個開發的工具。它側重于安全性和性能,絕對是最安全的開發框架之一。 PHP是為Web開發設計的服務器腳本語言,但也是一種通用的編程語言。超過2.4億個索引域使用PHP,包括很多重要的網站,例如Facebook、Digg和WordPress。...
摘要:原文地址為方法類函數生成文檔已經成為了程序員的習慣所以需要知道通過源代碼生成獨立的文檔本文中我會介紹一款新的文檔生成工具什么是是插入到類接口方法屬性頂部的多行注釋為了闡明這個我們看下中的代碼片段開始于結束于每行之間使用當定義一個類屬性或者 原文地址: Generating PHP Documentation with Sami 為方法, 類, 函數生成文檔已經成為了程序員的習慣, 所以...
摘要:文章的第二部分涵蓋了內存管理的概念,不久后將發布。的標準化工作是由國際組織負責的,相關規范被稱為或者。隨著分析器和編譯器不斷地更改字節碼,的執行性能逐漸提高。 原文地址:How Does JavaScript Really Work? (Part 1) 原文作者:Priyesh Patel 譯者:Chor showImg(https://segmentfault.com/img...
摘要:獨立的擴展可以獨立于源碼之外進行分發。定義一個新擴展我們給示例擴展命名為。對于一個獨立擴展來說,你只需要做一些宏調用即可。通過以上的步驟,你已經有了一個獨立的擴展了。 本文翻譯自 PHP 源碼中的 README.SELF-CONTAINED-EXTENSIONS。文中標記了 注 的內容均為自己添加。內容有點老,也挺啰嗦,沒講什么深入的內容,但是可以作為入門學習參考。 獨立的 PHP 擴...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
閱讀 2902·2023-04-26 02:14
閱讀 3751·2019-08-30 15:55
閱讀 1843·2019-08-29 16:42
閱讀 2757·2019-08-26 11:55
閱讀 2846·2019-08-23 13:38
閱讀 480·2019-08-23 12:10
閱讀 1308·2019-08-23 11:44
閱讀 2790·2019-08-23 11:43