当前位置: 首页 > 后端技术 > PHP

pflag-更好的PHP命令行选项解析库

时间:2023-03-29 19:36:36 PHP

php-toolkit/pflag是一个PHP编写的通用命令行标志(选项和参数)解析库。Github仓库:php-toolkit/pflag功能说明常用命令行选项和参数Parser支持设置值数据类型(int、string、bool、array),自动格式化输入值支持选项/参数设置默认值支持作为一个选项设置多个短名称支持从环境变量中读取标志值支持根据需要设置选项/参数支持设置验证器检查输入值支持自动渲染漂亮的帮助信息。命令行选项:选项以-或--开头,首字符必须为字母。长选项以--开头。eg:--long--longvaluestartswith-asshortoptions-s-avaluesupport定义数组选项eg:--tagphp--taggowillget$tag=[php,go]命令行参数:那些不能满足的选项被认为是参数支持绑定命名参数支持定义数组参数InstallcomposerInstallcomposerrequiretoolkit/pflagFlagsUseFlags-是一个命令行标志(选项和参数)解析器和管理器。有关示例代码,请参见example/flags-demo.php创建解析器创建并初始化解析器使用Toolkit\PFlag\Flags;requiredirname(__DIR__)。'/test/bootstrap.php';$flags=$_SERVER['argv'];//注意:必须移动第一个元素。$scriptFile=array_shift($flags);$fs=Flags::new();//(可选)可以添加一些自定义设置$fs->setScriptFile($scriptFile);/**@seeFlags::$settings*/$fs->setSettings(['descNlOnOptLen'=>26]);//...DefineoptionsDefineoptions-定义支持的选项设置,在解析的时候会根据定义解析添加选项定义的例子:useToolkit\PFlag\Flag\Option;useToolkit\PFlag\FlagType;useToolkit\PFlag\Validator\EnumValidator;//添加选项//-快速添加$fs->addOpt('age','a','thisisaintoption',FlagType::INT);//-使用字符串规则快速添加选项定义$fs->addOptByRule('name,n','string;thisisastringoption;true');//--一次添加多个选项$fs->addOptsByRules(['tag,t'=>'strings;arrayoption,allowsetmultitime','f'=>'bool;thisisanbooloption',]);//-使用数组定义/**@seeFlags::DEFINE_ITEM数组规则*/$fs->addOptByRule('name-is-very-lang',['type'=>FlagType::STRING,'desc'=>'optionnameistolang,descwillprintonnewline','shorts'=>['d','e','f'],//提示:添加验证器限制输入值。'validator'=>EnumValidator::new(['one','two','three']),]);//-使用Option对象$opt=Option::new('str1',"thisisstringoption,\ndesc有多行,\nhaha...");$opt->setDefault('defVal');$fs->addOption($opt);Definitionparameterdefinitionparameter-definition支持的选项设置,解析时,它将根据定义解析输入添加参数定义示例:useToolkit\PFlag\Flag\Argument;useToolkit\PFlag\FlagType;//addarguments//-quickadd$fs->addArg('strArg1','theisstringargandisrequired','string',true);//-使用字符串规则快速添加定义$fs->addArgByRule('intArg2','int;thisisaintargandwithdefaultvalue;no;89');//-使用参数对象$arg=Argument::new('arrArg');//或$arg->setType(FlagType::ARRAY);$arg->setType(FlagType::STRINGS);$arg->setDesc("这是一个数组arg,\n允许多值,\n必须最后定义");$fs->addArgument($arg);解析命令行输入,最后调用parse()解析命令行输入数据//...if(!$fs->parse($flags)){//onrenderhelpreturn;}vdump($fs->getOpts(),$fs->getArgs());显示帮助输入-h或--help时会自动呈现帮助信息$phpexample/flags-demo.php--helpOutput:运行示例:$phpexample/flags-demo.php--nameinhere--age99--taggo-tphp-tjava-done-farg080arr0arr1输出结果:#optiondataarray(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)}#parameterdataarray(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)。提示:输入值选项数据将通过定义的数据类型自动格式化$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)//获取数组arg$arrArg=$fs->getArg(1);//array{"arr0","arr1"}//通过名称获取值$arrArg=$fs->getArg('arrArg');//array{"arr0","arr1"}extended:RulesDefineOptionParameters规则使用规则快速定义选项或参数。string字符串规则用分号分隔每个部分;(完整规则:type;desc;required;default;shorts)。数组规则根据SFlags::DEFINE_ITEM设置定义支持的类型常量SeeFlagType::*useToolkit\PFlag\FlagType;$rules=[//v:onlyvalue,作为名称并使用默认类型FlagType::STRING//k-v:键是名称,值可以是字符串|array'long,s',//name=>rule'long,a,b'=>'int;anintoption',//long是选项名称,a和b是短裤。'f'=>FlagType::BOOL,'str1'=>['type'=>'int','desc'=>'一个字符串选项'],'tags'=>'array;一个数组选项',//也可以:ints,strings'name'=>'type;thedescriptionmessage;required;default',//withdesc,default,required]foroptionoptionsallowtosetshortnamesshortsTIP:For示例long,a,b-long是选项名称。剩下的a,b是它的短选项名称。ForParameterparametershavenoaliasesorshortnames数组参数只允许在数组定义项的末尾定义','type'=>FlagType::STRING,'helpType'=>'',//用于渲染帮助//'index'=>0,//仅用于rgument'required'=>false,'default'=>null,'shorts'=>[],//onlyforoption//valuevalidator'validator'=>null,//'category'=>null];自定义设置解析设置//------------------选择项解析设置--------------------/***找到第一个参数时停止解析选项。**-用于支持多命令。例如:`top--opt...sub--opt...`**@varbool*/protected$stopOnFistArg=true;/***跳过找到的未定义选项。**-FALSE将抛出FlagException错误。*-TRUE将跳过它并收集为原始参数,然后继续下一步解析。**@varbool*/protected$skipOnUndefined=false;//------------------参数解析设置------------------/***是否选项解析后自动绑定剩余参数**@varbool*/protected$autoBindArgs=true;/***严格匹配参数数。*如果存在解除绑定参数,将抛出FlagException**@varbool*/protected$strictMatchArgs=false;renderhelpsettingssupportsomesettingsforrenderhelp//--------------------settingsforbuilt-inrenderhelp--------------------/***输入'-h','--help'选项时自动渲染帮助信息**@varbool*/protected$autoRenderHelp=true;/***在呈现的帮助消息上显示数据类型**如果为假:**-o,--optOptiondesc**如果为True:**-o,--optSTRINGOptiondesc**@varbool*/protected$showTypeOnHelp=true;/***将在打印帮助消息之前调用它**@varcallable*/private$beforePrintHelp;自定义帮助消息渲染:$fs->setHelpRenderer(function(\Toolkit\PFlag\FlagsParser$fs){//渲染帮助消息});单元测试phpunit--debugtestwithcoverage:phpdbg-qrr$(whichphpunit)--coverage-textProjectsusingpflag这些项目使用https://github.com/php-toolki...:inhere/consoleFull-featuredphp命令行应用程序库.kiteKite是一款帮助de工具发展。有关更多信息,请参阅PackagistGithub存储库:php-toolkit/pflag