首頁 後端開發 php教程 你知道這個PHP命令列選項解析庫(pflag)嗎?

你知道這個PHP命令列選項解析庫(pflag)嗎?

Oct 21, 2021 pm 03:21 PM
php

php-toolkit/pflag是一個PHP所寫的,而通用的命令列標誌(選項與參數)解析庫。

Github 倉庫: php-toolkit/pflag(https://github.com/php-toolkit/pflag)

功能說明

  • 通用的命令列選項和參數解析器
  • 支援設定值資料型別(int,string,bool,array),將自動格式化輸入值
  • 支援為選項/參數設定預設值
  • 支援為一個選項設定多個短名稱
  • 支援從環境變數讀取標誌值
  • ##支持設定選項/參數為必須的(
  • required)
  • 支援設定驗證器以檢查輸入值
  • 支援自動渲染漂亮的幫助資訊。

命令列選項:

    選項以
  • --- 開頭的,且首字元必須是字母
  • -- 開頭的為長選項. eg: --long --long value
  • - 開頭的為短選項-s -a 值
  • 支援定義陣列選項
    • eg:
    • -- tag php --tag go 將會得到$tag = [php, go]

命令列參數 :

    不能滿足選項的都認定參數
  • 支援綁定命名參數
  • 支援定義陣列參數

##安裝

composer 安裝


composer require toolkit/pflag
登入後複製

#Flags 使用

Flags - 是一個命令列標誌(選項和參數)解析器和管理器。

範例程式碼請參閱example/你知道這個PHP命令列選項解析庫(pflag)嗎?.php

#建立解析器

#建立和初始化解析器

use Toolkit\PFlag\Flags;require dirname(__DIR__) . '/test/bootstrap.php';$flags = $_SERVER['argv'];// NOTICE: must shift first element.$scriptFile = array_shift($flags);$fs = Flags::new();// (可选的)可以添加一些自定义设置$fs->setScriptFile($scriptFile);/** @see Flags::$settings */$fs->setSettings([
    'descNlOnOptLen' => 26]);// ...
登入後複製

定義選項

定義選項- 定義好支援的選項設置,解析時將會根據定義來解析輸入

新增選項定義的範例:

use Toolkit\PFlag\Flag\Option;use Toolkit\PFlag\FlagType;use Toolkit\PFlag\Validator\EnumValidator;// add options// - quick add$fs->addOpt('age', 'a', 'this is a int option', FlagType::INT);// - 使用字符串规则快速添加选项定义$fs->addOptByRule('name,n', 'string;this is a string option;true');// -- 一次添加多个选项$fs->addOptsByRules([
    'tag,t' => 'strings;array option, allow set multi times',
    'f'     => 'bool;this is an bool option',]);// - 使用数组定义/** @see Flags::DEFINE_ITEM for array rule */$fs->addOptByRule('name-is-very-lang', [
    'type'   => FlagType::STRING,
    'desc'   => 'option name is to lang, desc will print on newline',
    'shorts' => ['d','e','f'],
    // TIP: add validator limit input value.
    'validator' => EnumValidator::new(['one', 'two', 'three']),]);// - 使用 Option 对象$opt = Option::new('str1', "this is  string option, \ndesc has multi line, \nhaha...");$opt->setDefault('defVal');$fs->addOption($opt);
登入後複製

定義參數

定義參數- 定義好支援的選項設置,解析時會根據定義來解析輸入

添加參數定義的範例:

use Toolkit\PFlag\Flag\Argument;use Toolkit\PFlag\FlagType;// add arguments// - quick add$fs->addArg('strArg1', 'the is string arg and is required', 'string', true);// - 使用字符串规则快速添加定义$fs->addArgByRule('intArg2', 'int;this is a int arg and with default value;no;89');// - 使用 Argument 对象$arg = Argument::new('arrArg');// OR $arg->setType(FlagType::ARRAY);$arg->setType(FlagType::STRINGS);$arg->setDesc("this is an array arg,\n allow multi value,\n must define at last");$fs->addArgument($arg);
登入後複製

解析命令列輸入

最後呼叫parse()

解析命令列輸入資料

// ...if (!$fs->parse($flags)) {
    // on render help
    return;}vdump($fs->getOpts(), $fs->getArgs());
登入後複製
#顯示幫助

當輸入-h--help

會自動渲染幫助資訊。

$ php example/你知道這個PHP命令列選項解析庫(pflag)嗎?.php --help
登入後複製
Output:

你知道這個PHP命令列選項解析庫(pflag)嗎?

執行範例:

$ php example/你知道這個PHP命令列選項解析庫(pflag)嗎?.php --name inhere --age 99 --tag go -t php -t java -d one -f arg0 80 arr0 arr1
登入後複製
輸出結果:
# 选项数据array(6) {
  ["str1"]=> string(6) "defVal"
  ["name"]=> string(6) "inhere"
  ["age"]=> int(99)
  ["tag"]=> array(3) {
    [0]=> string(2) "go"
    [1]=> string(3) "php"
    [2]=> string(4) "java"
  }
  ["name-is-very-lang"]=> string(3) "one"
  ["f"]=> bool(true)}# 参数数据 
array(3) {
  [0]=> string(4) "arg0"
  [1]=> int(80)
  [2]=> array(2) {
    [0]=> string(4) "arr0"
    [1]=> string(4) "arr1"
  }}
登入後複製

#取得輸入值

取得flag值很簡單,使用方法getOpt(string $name) getArg($nameOrIndex)

即可.

TIP: 將透過定義的資料類型自動格式化輸入值

選項資料

$force = $fs->getOpt('f'); // bool(true)$age  = $fs->getOpt('age'); // int(99)$name = $fs->getOpt('name'); // string(inhere)$tags = $fs->getOpt('tags'); // array{"php", "go", "java"}
登入後複製
參數資料
$arg0 = $fs->getArg(0); // string(arg0)// get an array arg$arrArg = $fs->getArg(1); // array{"arr0", "arr1"}// get value by name$arrArg = $fs->getArg('arrArg'); // array{"arr0", "arr1"}
登入後複製

#擴充:規則定義

#選項參數規則。使用規則可以快速定義一個選項或參數。 【推薦:PHP影片教學

  • string 字串規則以分號; 分割每個部分(完整規則:type;desc ;required;default;shorts
  • ).
  • array 規則按SFlags::DEFINE_ITEM
  • 設定定義
  • 支援的類型常數請看FlagType:: *

use Toolkit\PFlag\FlagType;$rules = [
     // v: 只有值,作为名称并使用默认类型 FlagType::STRING
     // k-v: 键是名称,值可以是字符串|数组
     'long,s',
     // name => rule
     'long,a,b' => 'int;an int option', // long is option name, a and b is shorts.
     'f'      => FlagType::BOOL,
     'str1'   => ['type' => 'int', 'desc' => 'an string option'],
     'tags'   => 'array; an array option', // can also: ints, strings
     'name'   => 'type;the description message;required;default', // with desc, default, required]
登入後複製
對於選項
  • #選項允許設定短名稱shorts

TIP: 例如long,a,b - long 是選項名稱. 剩餘的a,b

都是它的短選項名稱.

對於參數

  • 參數沒有別名或短名稱
  • 陣列參數只允許定義在最後

陣列定義項目

常數Flags::DEFINE_ITEM

:
public const DEFINE_ITEM = [
    'name'      => '',
    'desc'      => '',
    'type'      => FlagType::STRING,
    'helpType'  => '', // use for render help
    // 'index'    => 0, // only for argument
    'required'  => false,
    'default'   => null,
    'shorts'    => [], // only for option
    // value validator
    'validator' => null,
    // 'category' => null];
登入後複製

自訂設定

解析設定

    // -------------------- 选项解析设置 --------------------

    /**
     * Stop parse option on found first argument.
     *
     * - Useful for support multi commands. eg: `top --opt ... sub --opt ...`
     *
     * @var bool
     */
    protected $stopOnFistArg = true;

    /**
     * Skip on found undefined option.
     *
     * - FALSE will throw FlagException error.
     * - TRUE  will skip it and collect as raw arg, then continue parse next.
     *
     * @var bool
     */
    protected $skipOnUndefined = false;

    // -------------------- 参数解析设置 --------------------

    /**
     * Whether auto bind remaining args after option parsed
     *
     * @var bool
     */
    protected $autoBindArgs = true;

    /**
     * Strict match args number.
     * if exist unbind args, will throw FlagException
     *
     * @var bool
     */
    protected $strictMatchArgs = false;
登入後複製

渲染幫助設定

support some settings for render help

    // -------------------- settings for built-in render help --------------------

    /**
     * 自动渲染帮助信息当输入 '-h', '--help' 选项时
     *
     * @var bool
     */
    protected $autoRenderHelp = true;

    /**
     * 在渲染的帮助信息上显示数据类型
     *
     * if False:
     *
     * -o, --opt    Option desc
     *
     * if True:
     *
     * -o, --opt STRING   Option desc
     *
     * @var bool
     */
    protected $showTypeOnHelp = true;

    /**
     * 将在打印帮助消息之前调用它
     *
     * @var callable
     */
    private $beforePrintHelp;
登入後複製
自訂幫助訊息渲染:###
$fs->setHelpRenderer(function (\Toolkit\PFlag\FlagsParser $fs) {
    // render help messages});
登入後複製

单元测试

phpunit --debug
登入後複製

test with coverage:

phpdbg -qrr $(which phpunit) --coverage-text
登入後複製

使用pflag的项目

Check out these projects, which use github.com/php-toolkit/pflag :

  • inhere/console Full-featured php command line application library.
  • kite Kite is a tool for help development.
  • More, please see Packagist

Github 仓库: php-toolkit/pflag(https://github.com/php-toolkit/pflag)                                                  

以上是你知道這個PHP命令列選項解析庫(pflag)嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles