在 PHP 中,当我们在获取命令行参数时,可以通过遍历$argv来获取,其实呢是有规范可循的,也就是 GNU C-style parser for command line options 。
比如使用命令wget下载文件时,使用下面的一些方式来指定option都可以
wget http://mengkang.net/a.jpg -O b.jpg wget http://mengkang.net/a.jpg -O=b.jpg wget http://mengkang.net/a.jpg -Ob.jpg --tries=3 -b wget http://mengkang.net/a.jpg -Ob.jpg --tries=3 -bvd
我们整理下command line options的规则,首先参数分为短参数名和完整参数名,而且一些还有映射关系。比如我们使用wget时,-O对应--output-document。
总结 options 使用规范
短参数名,有一个限制,只能是一个char字符,只能1字节,不能超过1字节,比如上面的第四个命令的最后一个参数就不知道是一个参数还是三个参数了。 短参数名用单个连字符(-)开始 短参数可以一个-后面跟多个参数名 长参数名,则是多字节的的,两个连字符(--)开始 行参与实参之间,可以直接连接,也可以用空格隔开,还可以用等号连接 参数分为没有值,必须传值,可选传值(也就是可传可不传)在 PHP 中的使用
getopt ( string $options [, array $longopts [, int &$optind ]] ) : array
https://www.php.net/manual/zh/function.getopt.php
$options 短参数字符列表,参数字符后面用:标识必须传值;参数字符后面用::标识可选传值;只有参数字符表示该参数(或者说选项)不接受传值
$longopts 长参数由于是多字节,所以必须是数组,否则没法分隔。长参数同样遵循上面::、:规则
php里面缺少结构体的支撑,相比c的长选项的配置更加简洁,但也缺少了长短选项的映射关系配置。
$shortOpts = "O:Vv::dh"; $longOpts = ["output-document:","version","verbose::", "debug", "help"]; $options = getopt($shortOpts, $longOpts); var_export($options);
php getopt.php -Oa.jpg array ( 'O' => 'a.jpg', ) php getopt.php -O=a.jpg array ( 'O' => 'a.jpg', ) php getopt.php -O a.jpg array ( 'O' => 'a.jpg', ) php getopt.php -O=a.jpg -dhV array ( 'O' => 'a.jpg', 'd' => false, 'h' => false, 'V' => false, ) php getopt.php -O=a.jpg -dhV -vvv array ( 'O' => 'a.jpg', 'd' => false, 'h' => false, 'V' => false, 'v' => 'vv', )
上面例子中我的短参数和长参数是对应的,但是没有数据结构来表示他们的对应关系(在C里面有option结构体来做这个对应关系的管理),所以我们两个都传的话,程序两个值会收到,然后我们自己判断短参数和长参数使用哪个。
php getopt.php -O=a.jpg -dhV -vvv --output-document b.jpg --debug array ( 'O' => 'a.jpg', 'd' => false, 'h' => false, 'V' => false, 'v' => 'vv', 'output-document' => 'b.jpg', 'debug' => false, )
![]() |
php 使用 __call实现重载功能示例 |
本文实例讲述了php 使用 __call实现重载功能。分享给大家供大家参考,具体如下: php/** * Created by PhpStorm. * User: funco |
![]() |
PHP chunk_split()函数讲解 |
PHP chunk_split() 函数 实例 在每个字符后分割一次字符串,并在每个分割后添加 ".": php $str = "Hello world!"; echo chunk_spli |
![]() |
PHP获取不了React Native Fecth参数的解决办 |
话不多说,我们直接来看示例 React Native 使用 fetch 进行网络请求,推荐 Promise 的形式进行数据处理。 官方的 Demo 如下 |
![]() |
总结PHP删除字符串最后一个字符的三种 |
一、前言 从数据库中 select() 读取一对多的信息时,经常需要将取出的数组用某个特定的字符分割,然后拼接成字符串 |
![]() |
PHP简单字符串过滤方法示例 |
本文实例讲述了PHP简单字符串过滤方法。分享给大家供大家参考,具体如下: !DOCTYPE htmlhtml lang="zh-cn"headmeta charset=" |
![]() |
总结PHP如何获取当前主机、域名、网址 |
话不多说,我们直接看代码 //获取域名或主机地址echo $_SERVER['HTTP_HOST']."br /"; //获取网页地址echo $_SERVER['PHP_SELF']."br |
![]() |
PHP入门教程之自定义函数用法详解(创建 |
本文实例讲述了PHP自定义函数用法。分享给大家供大家参考,具体如下: Demo1.php php //标准函数,内置函数 echo md5(' |
![]() |
PHP入门教程之字符串处理技巧总结(转换 |
本文实例总结了PHP字符串处理技巧。分享给大家供大家参考,具体如下: Demo1.php php //源代码是文本形式,页面显示是 |
![]() |
php版微信公众平台接口参数调试实现判 |
本文实例讲述了php版微信公众平台接口参数调试实现判断用户行为的方法。分享给大家供大家参考,具体如下: 微信 |
![]() |
PHP中文字符串截断无乱码解决方法 |
一个比较好用的字符串截取函数: function substring($str, $start, $length){ //比较好用字符串截取函数 $len = $length; if($length |