php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码
PHP 命令行参数解析工具类的示例代码
/**
* 命令行参数解析工具类
* @author guolinchao
*/
class CommandLine
{
// 临时记录短选项的选项值
private static $shortOptVal = null;
// options value
private static $optsArr = array();
// command args
private static $argsArr = array();
// 是否已解析过命令行参数
private static $isParse = false;
public function construct() {
if(!self::$isParse) {
self::parseArgs();
}
}
/**
* 获取选项值
*/
public function getOptVal($opt) {
if(isset(self::$optsArr[$opt])) {
return self::$optsArr[$opt];
}
return null;
}
/**
* 获取命令行参数
*/
public function getArg($index) {
if(isset(self::$argsArr[$index])) {
return self::$argsArr[$index];
}
return null;
}
/**
* 注册选项对应的回调函数, $callback 应该有一个参数, 用于接收选项值
*/
public function option($opt, $callback) {
// check
if(!is_callable($callback)) {
throw new Exception(sprintf('Not a valid callback function [%s].', $callback));
}
if(isset(self::$optsArr[$opt])) {
// call user function
call_user_func($callback, self::$optsArr[$opt]);
} else {
throw new Exception(sprintf('Unknown option [%s].', $opt));
}
}
/**
* 是否是 -s 形式的短选项
*/
public static function isShortOptions($opt) {
if(preg_match('/^\-([a-zA-Z])$/', $opt, $matchs)) {
return $matchs[1];
}
return false;
}
/**
* 是否是 -hlocalhost 形式的短选项
*/
public static function isShortOptionsWithValue($opt) {
if(preg_match('/^\-([a-zA-Z])([\S]+)$/', $opt, $matchs)) {
self::$shortOptVal = $matchs[2];
return $matchs[1];
}
return false;
}
/**
* 是否是 --help 形式的长选项
*/
public static function isLongOptions($opt) {
if(preg_match('/^\-\-([a-zA-Z0-9\-_]{2,})$/', $opt, $matchs)) {
return $matchs[1];
}
return false;
}
/**
* 是否是 --options=opt_value 形式的长选项
*/
public static function isLongOptionsWithValue($opt) {
if(preg_match('/^\-\-([a-zA-Z0-9\-_]{2,})(?:\=(.*?))$/', $opt, $matchs)) {
$tmpV = trim($matchs[2], '"');
self::$shortOptVal = empty($tmpV) ? true : $tmpV;
return $matchs[1];
}
return false;
}
/**
* 是否是命令行参数
*/
public static function isArg($value) {
return ! preg_match('/^\-/', $value);
}
/**
* 解析命令行参数
*/
public static function parseArgs() {
global $argv;
if(self::$isParse) {
return ;
}
// index start from 1.
$index = 1;
$length = count($argv);
$retArgs = array('opts'=>array(), 'args'=>array());
while($index < $length) {
// current value
$curVal = $argv[$index];
// short options or long options
if( ($sp = self::isShortOptions($curVal)) || ($lp = self::isLongOptions($curVal)) ) {
// options array key
$key = $sp ? $sp : $lp;
// go ahead
$index++;
if( isset($argv[$index]) && self::isArg($argv[$index]) ) {
$retArgs['opts'][$key] = $argv[$index];
} else {
$retArgs['opts'][$key] = true;
// back away
$index--;
}
} // short options with value || long options with value
else if( false !== ($key = self::isShortOptionsWithValue($curVal))
|| false !== ($key = self::isLongOptionsWithValue($curVal)) ) {
$retArgs['opts'][$key] = self::$shortOptVal;
} // command args
else if( self::isArg($curVal) ) {
$retArgs['args'][] = $curVal;
}
// incr index
$index++;
}
self::$optsArr = $retArgs['opts'];
self::$argsArr = $retArgs['args'];
self::$isParse = true;
return $retArgs;
}
}
用法如下:<?php
include 'CommandLine.php';
$args = CommandLine::parseArgs();
print_r($args);
// or
$cmd = new CommandLine();
$cmd->option('h', function ($val){
// 处理选项 h
// $val 选项值
// ...
echo 'Option h handler.';
});
命令行测试:
php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码相关推荐
- linux命令基础知识 管道流,linux基础知识-I/O重定向,管道(示例代码)
系统设定 默认输出设备:标准输出,STDOUT, 1 默认输入设备:标准输入, STDIN, 0 标准错误输出:STDERR, 2 标准输入:键盘 标准输出和错误输出:显示器 I/O重定向: Linu ...
- linux用命令导出mysql数据库,linux下导入、导出mysql数据库命令(示例代码)
一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1.导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql #/usr ...
- java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据
java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据 使用插件:spire.doc 创建工具类,上代码: import com.spire.doc.D ...
- linux 网络通讯 命令,Linux—网络通讯管理命令
一.ping命令 1. ping主机名2. ping域名 [root@localhost~]# pingwww.baidu.com3. pingIP地址 [root@localhost~]# ping ...
- linux命令详解之ls命令
ls命令概述 ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似.当执行ls命令时,默认显示的只有非隐藏文件的文件名.以文件名进行排序及文件名代表的颜色显示.当不加参数时,默认列 ...
- dom4j 学习 -- 封装dom4j工具类+如何使用dom4j解析
今天项目里面用到dom4j解析xml数据,特地整理了一下封装dom4j的工具方法,使用dom4j来解析xml文档. 首先是封装了dom4j的工具类: package myDOM4J;import ja ...
- python命令行参数作用_Python命令行参数解析模块argparse
前言 更多内容,请访问我的 个人博客. 以前 optparse 比较火,但是在python2.7版本后,官方不再维护这个模块,转而大力支持 argparse . argparse 模块可以让人轻松编写 ...
- python 参数_python脚本命令行参数解析
前言 在python命令行参数的解析模块中,我们常用的就是sys内置模块,但该模块的功能过于原始单一,很多具体的逻辑功能还得靠我们自己手动实现,实在较为麻烦.在这里向大家推荐一个好用的参数解析的模块a ...
- linux的compgen命令,linux shell中的命令自动补全(compgen complete)与 命令行参数解析...
很多时候,当我们写一个脚本时,我们总会提供一些可选的命令选项.当可选项比较多的时候,比如git, 如果能够提供命令自动补全,无疑是锦上添花的事.而且个人认为,这种方式,比采用将命令做成选择菜单要更好一 ...
最新文章
- 浅谈网络游戏《天龙X部》的文件加密格式
- storm流式大数据处理流行吗
- html5赛车小游戏,html5公路赛车小游戏
- MooTools Class 使用、继承详解
- c#与mysql数据库连接以及.net framework版本修改问题
- Java黑皮书课后题第7章:*7.13(随机数选择器)编写一个方法,返回1到54之间的随机数,但不能是传递到实参中的数。指定如下方法头
- 计算机科普小知识——Win7系统32位与64位的区别,该如何选择?
- 使用函数进行邮件发送的示例
- 64位系统目录在那里_旷视王珏:前Adobe首席科学家,手握64项专利,曾助力奥斯卡...
- Linux -- ×××服务简绍、配置及应用(2)
- [转]Newtonsoft.Json高级用法
- 吴恩达神经网络和深度学习-学习笔记-29-卷积的基础知识
- Atitit java读取tif文件为空null的解决 图像处理
- en55032最新标准下载_欧盟新EMC标准EN55032
- Scratch下载(各版本都可下载)
- win10/11: Windows Audio无法启动 错误 0x80070005:拒绝访问
- Android实现模拟装备购买
- 美团Robust热修复工具使用记录
- 使用react完成图片放大功能(淘宝放大镜)
- Spring Boot中使用Spring Data JPA示例
热门文章
- 【Python-3.5】win7安装Pygame
- ServiceStack.Redis 连接有密码的Redis问题解决
- [解决方案]Window 2008 R2 + IIS7.5 + VS2013 错误代码 0x80070002
- nodejs 写服务器解决中文乱码问题
- SpringMvc 400 Bad Request解决方法
- Win10蓝牙鼠标老是断连卡顿的解决方法
- 项目出现 The superclass “javax.servlet.http.HttpServlet“ was not found on the Java Build Path 解决方法
- 如何编写内联if语句用于打印?
- ios 销毁当前页面重新开启_利用Vue中keep-alive,快速实现页面缓存
- Bsdiff:Bsd断电差分升级