亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

岳光 / 723人閱讀

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

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

如果你是一名Web開發(fā)工程師,那么你一定使用PHP開發(fā)過很多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ò)展包,它簡化了創(chuàng)建一個(gè)漂亮的、可測試的PHP命令行應(yīng)用的過程,它提供了開箱即用的諸如(可選/必選的)參數(shù)規(guī)范和選項(xiàng)規(guī)范(使用-符號(hào))等功能。那么,我們來一起開始構(gòu)建我們的應(yīng)用。

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

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

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

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

greet可以接受一個(gè)選項(xiàng)(--say)來更改問候語(默認(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)沒有指定命令時(shí),HelloWorld默認(rèn)輸出一屏信息提示

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

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

OK,讓我們來看看我們的HelloWorld文件中的代碼。

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

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

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

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

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

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

我們添加一個(gè)可選的name參數(shù)(addArgument()),并提供參數(shù)的簡短描述。然后,我們使用這個(gè)addOption()方法添加一個(gè)say選項(xiàng)。請(qǐng)注意,選項(xiàng)始終是可選的,但您可以指定要傳遞的值,也可以僅僅將其用作指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è)問候語到終端。我們監(jiān)聽$input對(duì)象,使用getArgument()getOption()輔助方法獲取傳遞給greet的選項(xiàng)和參數(shù),然后,我們只需要檢查傳遞了哪些參數(shù)或者選項(xiàng),并相應(yīng)的(使用$output對(duì)象)向控制臺(tái)輸出打印問候語。這個(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)自定義問候語

最后,greet自定義問候語和問候人


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

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

0條評(píng)論

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