成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

【譯】如何使用PHP快速構(gòu)建命令行應(yīng)用程序

岳光 / 664人閱讀

摘要:但是你知道如何使用快速構(gòu)建一個(gè)命令行應(yīng)用程序工具嗎下面我將向您展示如何使用和一個(gè)著名的的擴(kuò)展包構(gòu)建一個(gè)命令行應(yīng)用。這個(gè)應(yīng)用程序?qū)?huì)有如下功能為我們提供一個(gè)多帶帶的問(wèn)候命令,我們將使用它來(lái)與應(yīng)用程序交互。

原文地址:How to build a Command Line Application using PHP?

如果你是一名Web開(kāi)發(fā)工程師,那么你一定使用PHP開(kāi)發(fā)過(guò)很多Web應(yīng)用程序。但是你知道如何使用PHP快速構(gòu)建一個(gè)命令行應(yīng)用程序(工具)嗎?下面我將向您展示如何使用PHP和一個(gè)著名的的Composer擴(kuò)展包--Symphony/Console構(gòu)建一個(gè)命令行應(yīng)用。

Symphony/Console是一個(gè)使用Composer管理的PHP擴(kuò)展包,它簡(jiǎn)化了創(chuàng)建一個(gè)漂亮的、可測(cè)試的PHP命令行應(yīng)用的過(guò)程,它提供了開(kāi)箱即用的諸如(可選/必選的)參數(shù)規(guī)范和選項(xiàng)規(guī)范(使用-符號(hào))等功能。那么,我們來(lái)一起開(kāi)始構(gòu)建我們的應(yīng)用。

按照慣例,我們將構(gòu)建一個(gè)“Hello World”的控制臺(tái)應(yīng)用程序,但是要稍微修改一下它,讓它支持自定義問(wèn)候語(yǔ)(代替Hello),并且可以隨意的去問(wèn)候一個(gè)人(代替world)。

這個(gè)Hello World應(yīng)用程序?qū)?huì)有如下功能:

為我們提供一個(gè)多帶帶的greet(問(wèn)候)命令,我們將使用它來(lái)與應(yīng)用程序交互。

greet可以接受一個(gè)可選的參數(shù)(name)來(lái)打印出一個(gè)被問(wèn)候的人(默認(rèn)是World)。

greet可以接受一個(gè)選項(xiàng)(--say)來(lái)更改問(wèn)候語(yǔ)(默認(rèn)是Hello)。

如果我們么樣給定參數(shù)或者選項(xiàng),程序?qū)⒛J(rèn)輸出一個(gè)Hello World消息。

如何使用PHP構(gòu)建命令行應(yīng)用程序

為我們的項(xiàng)目創(chuàng)建新的目錄并cd進(jìn)入它:

mkdir hello-world-app && cd hello-world-app

使用Composer將控制臺(tái)組件引入我們項(xiàng)目

composer require symfony/console

然后為你的應(yīng)用程序創(chuàng)建一個(gè)入口點(diǎn),PHP擴(kuò)展不是必需的,因?yàn)槲覀円惯@個(gè)文件成為可執(zhí)行文件,并在文件本身中指定環(huán)境。

touch HelloWorld
chmod +X HelloWorld 

將下面的代碼添加到HelloWorld文件中(后面我將為每一行做注解),并在你的終端中執(zhí)行HelloWorld這個(gè)應(yīng)用程序.

#!/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控制臺(tái)程序

當(dāng)沒(méi)有指定命令時(shí),HelloWorld默認(rèn)輸出一屏信息提示

Symfony Console組件給我們提供的應(yīng)用程序有幾個(gè)開(kāi)箱可用的選項(xiàng)的和命令,比如helplist--version

解釋這個(gè)神奇的文件內(nèi)容

OK,讓我們來(lái)看看我們的HelloWorld文件中的代碼。

我們引入autoload.php以使用由composer提供的自動(dòng)加載以及控制臺(tái)組件提供的各功能。

InputInterfaceOutputInterface將使應(yīng)用程序的輸入和輸出功能變得簡(jiǎn)單,InputArgumentInputOption將幫助我們處理傳遞給我們HelloWorld應(yīng)用程序的選項(xiàng)和參數(shù)。

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

use SymfonyComponentConsoleApplication; 
use SymfonyComponentConsoleInputInputArgument; 
use SymfonyComponentConsoleInputInputInterface; 
use SymfonyComponentConsoleInputInputOption; 
use SymfonyComponentConsoleOutputOutputInterface;

symphony/console通過(guò)名稱(chēng)實(shí)例化一個(gè)新的應(yīng)用程序HelloWorld (v1.0.0) ,并注冊(cè)我們的greet命令。

(new Application("Hello World", "1.0.0"))
    ->register("greet")

我們添加一個(gè)可選的name參數(shù)(addArgument()),并提供參數(shù)的簡(jiǎn)短描述。然后,我們使用這個(gè)addOption()方法添加一個(gè)say選項(xiàng)。請(qǐng)注意,選項(xiàng)始終是可選的,但您可以指定要傳遞的值,也可以?xún)H僅將其用作指boolean標(biāo)識(shí)。

->addArgument("name", InputArgument::OPTIONAL, "Name of the person") 
->addOption("say", null, InputOption::VALUE_REQUIRED, "Custom greeting")

setCode()方法中的代碼會(huì)包含我們應(yīng)用程序的主邏輯,它會(huì)根據(jù)傳遞的參數(shù)和選項(xiàng)打印一個(gè)問(wèn)候語(yǔ)到終端。我們監(jiān)聽(tīng)$input對(duì)象,使用getArgument()getOption()輔助方法獲取傳遞給greet的選項(xiàng)和參數(shù),然后,我們只需要檢查傳遞了哪些參數(shù)或者選項(xiàng),并相應(yīng)的(使用$output對(duì)象)向控制臺(tái)輸出打印問(wèn)候語(yǔ)。這個(gè)writeln()方法可以根據(jù)標(biāo)簽格式化文本,比如輸出不同顏色的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!");
    }
  })

最后我們引導(dǎo)應(yīng)用程序并調(diào)用他的方法,以便他做好隨時(shí)接收和處理greet命令。

->getApplication()
->run();

現(xiàn)在讓我們?cè)趯?shí)例中看看我們HelloWorld程序

greet不傳遞任何參數(shù)和選項(xiàng)

greet有一個(gè)可選的name參數(shù)

greet使用say選項(xiàng)自定義問(wèn)候語(yǔ)

最后,greet自定義問(wèn)候語(yǔ)和問(wèn)候人


關(guān)于作者
程序開(kāi)發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事PHP和前端開(kāi)發(fā),使用Laravel和VueJs。合適和夠用是永不停息的追求。

個(gè)人網(wǎng)站:https://www.linganmin.cn

譯者注:本文中的部分鏈接和圖片地址已更換為國(guó)內(nèi)地址,如有翻譯錯(cuò)誤請(qǐng)多指正。
Happy Coding!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26222.html

相關(guān)文章

  • PHP:40+開(kāi)發(fā)工具推薦

    摘要:今天,就為開(kāi)發(fā)者介紹個(gè)方便的工具。對(duì)開(kāi)發(fā)者來(lái)說(shuō),是一個(gè)非常有用的工具,它提供了超過(guò)個(gè)有用的函數(shù)。該工具檢查輸入源代碼和報(bào)告任何違反給定的標(biāo)準(zhǔn)??蚣苁且粋€(gè)開(kāi)發(fā)的工具。它側(cè)重于安全性和性能,絕對(duì)是最安全的開(kāi)發(fā)框架之一。 PHP是為Web開(kāi)發(fā)設(shè)計(jì)的服務(wù)器腳本語(yǔ)言,但也是一種通用的編程語(yǔ)言。超過(guò)2.4億個(gè)索引域使用PHP,包括很多重要的網(wǎng)站,例如Facebook、Digg和WordPress。...

    dreambei 評(píng)論0 收藏0
  • [] 使用 Sami 生成 PHP 文檔

    摘要:原文地址為方法類(lèi)函數(shù)生成文檔已經(jīng)成為了程序員的習(xí)慣所以需要知道通過(guò)源代碼生成獨(dú)立的文檔本文中我會(huì)介紹一款新的文檔生成工具什么是是插入到類(lèi)接口方法屬性頂部的多行注釋為了闡明這個(gè)我們看下中的代碼片段開(kāi)始于結(jié)束于每行之間使用當(dāng)定義一個(gè)類(lèi)屬性或者 原文地址: Generating PHP Documentation with Sami 為方法, 類(lèi), 函數(shù)生成文檔已經(jīng)成為了程序員的習(xí)慣, 所以...

    banana_pi 評(píng)論0 收藏0
  • 」JavaScript 究竟是如何工作的?(第一部分)

    摘要:文章的第二部分涵蓋了內(nèi)存管理的概念,不久后將發(fā)布。的標(biāo)準(zhǔn)化工作是由國(guó)際組織負(fù)責(zé)的,相關(guān)規(guī)范被稱(chēng)為或者。隨著分析器和編譯器不斷地更改字節(jié)碼,的執(zhí)行性能逐漸提高。 原文地址:How Does JavaScript Really Work? (Part 1) 原文作者:Priyesh Patel 譯者:Chor showImg(https://segmentfault.com/img...

    Youngdze 評(píng)論0 收藏0
  • 如何編寫(xiě)一個(gè)獨(dú)立的 PHP 擴(kuò)展(

    摘要:獨(dú)立的擴(kuò)展可以獨(dú)立于源碼之外進(jìn)行分發(fā)。定義一個(gè)新擴(kuò)展我們給示例擴(kuò)展命名為。對(duì)于一個(gè)獨(dú)立擴(kuò)展來(lái)說(shuō),你只需要做一些宏調(diào)用即可。通過(guò)以上的步驟,你已經(jīng)有了一個(gè)獨(dú)立的擴(kuò)展了。 本文翻譯自 PHP 源碼中的 README.SELF-CONTAINED-EXTENSIONS。文中標(biāo)記了 注 的內(nèi)容均為自己添加。內(nèi)容有點(diǎn)老,也挺啰嗦,沒(méi)講什么深入的內(nèi)容,但是可以作為入門(mén)學(xué)習(xí)參考。 獨(dú)立的 PHP 擴(kuò)...

    JerryZou 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來(lái)學(xué)習(xí)一門(mén)新的編程語(yǔ)言吧!

    摘要:入門(mén),第一個(gè)這是一門(mén)很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類(lèi)工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...

    caspar 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<