旗下导航:搜·么
当前位置:网站首页 > PHP教程 > 正文

PHP中怎样经由过程getopt剖析GNU C作风命令行选项【php教程】

作者:搜搜PHP网发布时间:2019-12-04分类:PHP教程浏览:73


导读:在PHP中,当我们在猎取敕令行参数时,能够经由过程遍历$argv来猎取,实在呢是有范例可循的,也就是GNUC-styleparserforcommandlineo...
在 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 -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 内里却又兼容了这一点)

● 选项分为没有值,必需传值,可选传值(也就是可传可不传)

在 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 getopt.php -O=a.jpg -dhVvvv  
array (
  'O' => 'a.jpg',
  'd' => false,
  'h' => false,
  'V' => false,
  'v' => 'vv',
)
php getopt.php -O=a.jpg -dhvvvV
array (
  'O' => 'a.jpg',
  'd' => false,
  'h' => false,
  'v' => 'vvV',
)

总结了这个GNU C command line options 运用的套路,敕令运用起来就更溜了,不会懵逼为什么linux下种种东西运用的案例写法“光怪陆离”了。

在C内里并不支撑短选项和值用等号衔接,在PHP里倒是能够的,须要注重。

111

引荐:《PHP教程》

以上就是PHP中怎样经由过程getopt剖析GNU C作风敕令行选项的细致内容,更多请关注ki4网别的相干文章!

标签:PHP