Rumah > pembangunan bahagian belakang > tutorial php > Adakah anda tahu tentang pustaka parsing pilihan baris arahan PHP ini (pflag)?

Adakah anda tahu tentang pustaka parsing pilihan baris arahan PHP ini (pflag)?

藏色散人
Lepaskan: 2023-04-10 18:08:01
ke hadapan
2255 orang telah melayarinya

php-toolkit/pflag adalah bendera baris perintah sejagat (pilihan dan parameter) parsing perpustakaan yang ditulis dalam PHP.

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

Penerangan Fungsi

  • Pilihan baris arahan universal dan penghurai parameter
  • menyokong penetapan jenis data nilai (int,string,bool,array), secara automatik memformat nilai input
  • disokong sebagai pilihan/ Tetapan parameter lalai value
  • Menyokong menetapkan beberapa nama pendek untuk satu pilihan
  • Menyokong membaca nilai bendera ​​dari pembolehubah persekitaran
  • Menyokong tetapan pilihan/parameter seperti yang diperlukan (required)
  • Menyokong pengesah tetapan untuk menyemak nilai input
  • Menyokong pemaparan automatik maklumat bantuan yang cantik.

Pilihan baris perintah:

  • Pilihan bermula dengan - atau -- dan aksara pertama mestilah huruf
  • Perkara yang bermula dengan -- ialah pilihan yang panjang cth: --long --long value
  • Perkara yang bermula dengan - ialah pilihan pendek-s -a value
  • Sokongan menentukan pilihan tatasusunan.
    • cth: --tag php --tag go akan mendapat $tag = [php, go]

hujah baris arahan :

  • tidak boleh Apa-apa yang memenuhi pilihan diiktiraf sebagai parameter
  • Menyokong pengikatan parameter bernama
  • Menyokong menentukan parameter tatasusunan

Pemasangan

pemasangan komposer

composer require toolkit/pflag
Salin selepas log masuk

Bendera menggunakan

Bendera - ialah penghurai bendera baris perintah (pilihan dan hujah) dan peranti pengurusan.

Lihat contoh/Adakah anda tahu tentang pustaka parsing pilihan baris arahan PHP ini (pflag)?.php untuk kod contoh

Buat penghurai

Buat dan mulakan penghurai

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]);// ...
Salin selepas log masuk

Tentukan pilihan

Tentukan pilihan - Tentukan tetapan pilihan yang disokong, dan input akan dihuraikan mengikut definisi semasa menghuraikan

Tambah definisi pilihan Contoh:

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);
Salin selepas log masuk

Tentukan parameter

Tentukan parameter - tentukan tetapan pilihan yang disokong, dan input akan dihuraikan mengikut definisi semasa menghuraikan

Contoh menambah definisi parameter:

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);
Salin selepas log masuk

Menghuraikan input baris arahan

Akhirnya panggil parse() untuk menghuraikan data input baris arahan

// ...if (!$fs->parse($flags)) {
    // on render help
    return;}vdump($fs->getOpts(), $fs->getArgs());
Salin selepas log masuk

Tunjukkan bantuan

Apabila menaip -h atau --help, maklumat bantuan akan diberikan secara automatik.

$ php example/Adakah anda tahu tentang pustaka parsing pilihan baris arahan PHP ini (pflag)?.php --help
Salin selepas log masuk

Output:

Adakah anda tahu tentang pustaka parsing pilihan baris arahan PHP ini (pflag)?

Jalankan contoh:

$ php example/Adakah anda tahu tentang pustaka parsing pilihan baris arahan PHP ini (pflag)?.php --name inhere --age 99 --tag go -t php -t java -d one -f arg0 80 arr0 arr1
Salin selepas log masuk

Hasil output:

# 选项数据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"
  }}
Salin selepas log masuk

Dapatkan nilai input

Mendapatkan nilai bendera adalah sangat mudah, hanya gunakan getOpt(string $name) getArg($nameOrIndex).

PETUA: Nilai input akan diformatkan secara automatik oleh jenis data yang ditentukan

Data pilihan

$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"}
Salin selepas log masuk

Data parameter

$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"}
Salin selepas log masuk

Sambungan: Takrif peraturan

peraturan parameter pilihan. Gunakan peraturan untuk menentukan pilihan atau parameter dengan cepat. [Disyorkan: Tutorial Video PHP]

  • Peraturan rentetan rentetan menggunakan koma bertitik ; untuk memisahkan setiap bahagian (peraturan penuh: type;desc;required;default;shorts).
  • Array peraturan ditakrifkan mengikut tetapan SFlags::DEFINE_ITEM
  • Untuk pemalar jenis yang disokong, sila lihat 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]
Salin selepas log masuk

untuk pilihan

<.> Pilihan
    membenarkan menetapkan nama pendek
  • shorts
PETUA: Contohnya,

- long,a,b ialah nama pilihan yang tinggal nama pilihan pendek. longa,b

Tiada alias atau nama pendek untuk parameter

  • Parameter tatasusunan hanya dibenarkan ditakrifkan pada penghujung
Item definisi tatasusunan

Malar

:

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];
Salin selepas log masuk

Tetapan tersuai

Tetapan hurai

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

    /**
     * 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;
Salin selepas log masuk

Tetapan bantuan Rendersokong beberapa tetapan untuk bantuan render

pemarahan mesej Bantuan tersuai:
    // -------------------- 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;
Salin selepas log masuk
$fs->setHelpRenderer(function (\Toolkit\PFlag\FlagsParser $fs) {
    // render help messages});
Salin selepas log masuk

单元测试

phpunit --debug
Salin selepas log masuk

test with coverage:

phpdbg -qrr $(which phpunit) --coverage-text
Salin selepas log masuk

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

Atas ialah kandungan terperinci Adakah anda tahu tentang pustaka parsing pilihan baris arahan PHP ini (pflag)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan