Heim > Backend-Entwicklung > PHP-Tutorial > Kennen Sie diese Parsing-Bibliothek für PHP-Befehlszeilenoptionen (pflag)?

Kennen Sie diese Parsing-Bibliothek für PHP-Befehlszeilenoptionen (pflag)?

藏色散人
Freigeben: 2023-04-10 18:08:01
nach vorne
2254 Leute haben es durchsucht

php-toolkit/pflag ist eine in PHP geschriebene allgemeine Befehlszeilen-Flag-Parsing-Bibliothek (Option und Parameter). 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 value
  • 支持定义数组选项
    • eg: --tag php --tag go 将会得到 $tag = [php, go]

命令行参数:

  • 不能满足选项的都认作参数
  • 支持绑定命名参数
  • 支持定义数组参数

安装

composer 安装

composer require toolkit/pflag
Nach dem Login kopieren

Flags 使用

Flags - 是一个命令行标志(选项和参数)解析器和管理器。

示例代码请参见 example/Kennen Sie diese Parsing-Bibliothek für PHP-Befehlszeilenoptionen (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]);// ...
Nach dem Login kopieren

定义选项

定义选项 - 定义好支持的选项设置,解析时将会根据定义来解析输入

添加选项定义的示例:

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);
Nach dem Login kopieren

定义参数

定义参数 - 定义好支持的选项设置,解析时将会根据定义来解析输入

添加参数定义的示例:

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);
Nach dem Login kopieren

解析命令行输入

最后调用 parse() 解析命令行输入数据

// ...if (!$fs->parse($flags)) {
    // on render help
    return;}vdump($fs->getOpts(), $fs->getArgs());
Nach dem Login kopieren

显示帮助

当输入 -h--help 会自动渲染帮助信息。

$ php example/Kennen Sie diese Parsing-Bibliothek für PHP-Befehlszeilenoptionen (pflag)?.php --help
Nach dem Login kopieren

Output:

Kennen Sie diese Parsing-Bibliothek für PHP-Befehlszeilenoptionen (pflag)?

运行示例:

$ php example/Kennen Sie diese Parsing-Bibliothek für PHP-Befehlszeilenoptionen (pflag)?.php --name inhere --age 99 --tag go -t php -t java -d one -f arg0 80 arr0 arr1
Nach dem Login kopieren

输出结果:

# 选项数据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"
  }}
Nach dem Login kopieren

获取输入值

获取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"}
Nach dem Login kopieren

参数数据

$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"}
Nach dem Login kopieren

扩展:规则定义

选项参数规则。使用规则可以快速定义一个选项或参数。【推荐: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]
Nach dem Login kopieren

对于选项

  • 选项允许设置短名称 shorts

TIP: 例如 long,a,b - long 是选项名称. 剩余的 a,b 都是它的短选项名.

对于参数

  • 参数没有别名或者短名称
  • 数组参数只允许定义在最后

数组定义项

常量 Flags::DEFINE_ITEM

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

Funktionsbeschreibung

  • Gemeinsame Befehlszeilenoptionen und Parameter-Parser
  • Unterstützt die Einstellung von Wertdatentypen (int, string, bool, array), der den Eingabewert automatisch formatiert
  • Unterstützung als Option/Parameter Festlegen des Standardwerts
  • Unterstützt das Festlegen mehrerer Kurznamen für eine Option
  • Unterstützt das Lesen von Flag-Werten aus Umgebungsvariablen
  • Unterstützt das Festlegen von Optionen/Parametern nach Bedarf (erforderlich)
  • Unterstützt das Festlegen von Validatoren zum Überprüfen von Eingabewerten
  • Unterstützt die automatische Darstellung ansprechender Hilfeinformationen.

Befehlszeilenoptionen:
  • Optionen, die mit - oder -- beginnen, und Das erste Zeichen muss ein Buchstabe sein
  • Die mit -- beginnenden Optionen sind lange Optionen, z. B.: --long --long value
  • Dinge, die mit - beginnen, sind kurze Optionen -s -a value
  • Unterstützt die Definition von Array-Optionen
      Beispiel: --tag php --tag go erhält $tag = [php, go]
Befehlszeilenparameter:

  • Alles, was die Optionen nicht erfüllt, wird als Parameter erkannt
  • Unterstützung der Bindung benannter Parameter
  • Unterstützt: Array-Parameter definieren

Installation

Composer-Installation

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];
Nach dem Login kopieren

🎜🎜Flags mit 🎜🎜Flags – ist ein Befehlszeilen-Flag (Option und Argument). ) Parser und Manager. 🎜
🎜Siehe example/Kennen Sie diese Parsing-Bibliothek für PHP-Befehlszeilenoptionen (pflag)?.php für Beispielcode🎜
🎜🎜🎜Erstellen Sie einen Parser🎜🎜Erstellen und initialisieren Sie einen Parser🎜
    // -------------------- 选项解析设置 --------------------

    /**
     * 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;
Nach dem Login kopieren
🎜🎜🎜Definieren Sie Optionen🎜🎜Definieren Sie Optionen – definieren Sie gut unterstützte Optionen Einstellungen, die Eingabe wird während des Parsens gemäß der Definition analysiert. 🎜🎜Beispiel für das Hinzufügen einer Optionsdefinition: 🎜🎜 Beispiel für das Hinzufügen einer Parameterdefinition: 🎜
    // -------------------- 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;
Nach dem Login kopieren
🎜🎜🎜Befehlszeileneingabe analysieren🎜🎜Rufen Sie abschließend parse() auf, um Befehlszeileneingabedaten zu analysieren🎜
$fs->setHelpRenderer(function (\Toolkit\PFlag\FlagsParser $fs) {
    // render help messages});
Nach dem Login kopieren
Nach dem Login kopieren
🎜Hilfe anzeigen🎜 🎜Bei Eingabe von -h oder --help werden automatisch Hilfeinformationen gerendert. 🎜
phpunit --debug
Nach dem Login kopieren
Nach dem Login kopieren
🎜Ausgabe:🎜🎜Kennen Sie diese Parsing-Bibliothek für PHP-Befehlszeilenoptionen (pflag)? 🎜🎜Führen Sie das Beispiel aus:🎜
phpdbg -qrr $(which phpunit) --coverage-text
Nach dem Login kopieren
Nach dem Login kopieren
🎜Ausgabeergebnis:🎜rrreee🎜🎜🎜🎜Den Eingabewert abrufen🎜🎜Das Abrufen des Flag-Werts ist sehr einfach. Verwenden Sie die Methode getOpt( string $name) <code>getArg($nameOrIndex) Das ist es.🎜
🎜TIPP: Der Eingabewert wird automatisch durch den definierten Datentyp formatiert🎜
🎜Optionsdaten🎜rrreee🎜Parameterdaten🎜rrreee🎜🎜🎜🎜Erweiterung: Regeldefinition🎜🎜Optionsparameterregeln. Verwenden Sie Regeln, um schnell eine Option oder einen Parameter zu definieren. [Empfohlen: PHP-Video-Tutorial]🎜
  • String-String-Regeln trennen jeden Teil durch ein Semikolon ; (vollständige Regel: type;desc;required;default;shorts).
  • array Die Regeln werden gemäß SFlags::DEFINE_ITEM
  • Unterstützte Typkonstanten finden Sie unter FlagType::*
rrreee🎜 Für Optionen🎜
  • Optionen ermöglichen das Festlegen von Kurznamen shorts
🎜TIPP: Zum Beispiel long, a, blong ist der Optionsname. Die restlichen a,b sind die kurzen Optionsnamen 🎜
🎜Für Parameter 🎜
  • Parameter haben keine Aliase oder Kurznamen
  • Array-Parameter dürfen nur am Ende definiert werden
🎜Array-Definition Elemente🎜 🎜Konstante Flags::DEFINE_ITEM:🎜rrreee🎜🎜🎜🎜benutzerdefinierte Einstellungen🎜🎜🎜🎜Parsing-Einstellungen🎜rrreee🎜🎜🎜Render-Hilfeeinstellungen🎜🎜unterstützen einige Einstellungen für die Render-Hilfe 🎜rrreee🎜Benutzerdefinierte Darstellung der Hilfemeldung:🎜
$fs->setHelpRenderer(function (\Toolkit\PFlag\FlagsParser $fs) {
    // render help messages});
Nach dem Login kopieren
Nach dem Login kopieren

单元测试

phpunit --debug
Nach dem Login kopieren
Nach dem Login kopieren

test with coverage:

phpdbg -qrr $(which phpunit) --coverage-text
Nach dem Login kopieren
Nach dem Login kopieren

使用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)                                                  

Das obige ist der detaillierte Inhalt vonKennen Sie diese Parsing-Bibliothek für PHP-Befehlszeilenoptionen (pflag)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage