中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

PHP通過getopt解析GNU編譯風(fēng)格的方法

在 PHP 中,當(dāng)我們在獲取命令行參數(shù)時,可以通過遍歷$argv來獲取,其實呢是有規(guī)范可循的,也就是 GNU C-style parser for command line options 。

成都創(chuàng)新互聯(lián)服務(wù)項目包括商水網(wǎng)站建設(shè)、商水網(wǎng)站制作、商水網(wǎng)頁制作以及商水網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,商水網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到商水省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

比如使用命令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的規(guī)則,首先參數(shù)分為短參數(shù)名和完整參數(shù)名,而且一些還有映射關(guān)系。比如我們使用wget時,-O對應(yīng)--output-document。

總結(jié) options 使用規(guī)范

● 短選項名,有一個限制,只能是一個char字符,只能1字節(jié),不能超過1字節(jié),比如上面的第四個命令的最后一個參數(shù)就不知道是一個選項還是三個選項了。

● 短選項名用單個連字符(-)開始

● 短選項可以一個-后面跟多個選項名

● 長選項和短選項可以有映射關(guān)系,也可以沒有

● 長選項名,則是多字節(jié)的的,兩個連字符(--)開始

● 選項與實參之間,可以直接連接,也可以用空格隔開,還可以用等號連接

● 但是短選項用等號連接值,等號會被視為值的一部分(但是在 php 里面卻又兼容了這一點)

● 選項分為沒有值,必須傳值,可選傳值(也就是可傳可不傳)

在 PHP 中的使用

getopt ( string $options [, array $longopts [, int &$optind ]] ) : array
https://www.php.net/manual/zh/function.getopt.php

$options 短參數(shù)字符列表,參數(shù)字符后面用:標(biāo)識必須傳值;參數(shù)字符后面用::標(biāo)識可選傳值;只有參數(shù)字符表示該參數(shù)(或者說選項)不接受傳值

$longopts 長參數(shù)由于是多字節(jié),所以必須是數(shù)組,否則沒法分隔。長參數(shù)同樣遵循上面::、:規(guī)則

php里面缺少結(jié)構(gòu)體的支撐,相比c的長選項的配置更加簡潔,但也缺少了長短選項的映射關(guān)系配置。

$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',
)

上面例子中我的短參數(shù)和長參數(shù)是對應(yīng)的,但是沒有數(shù)據(jù)結(jié)構(gòu)來表示他們的對應(yīng)關(guān)系(在C里面有option結(jié)構(gòu)體來做這個對應(yīng)關(guān)系的管理),所以我們兩個都傳的話,程序兩個值會收到,然后我們自己判斷短參數(shù)和長參數(shù)使用哪個。

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,
)

這樣寫是不規(guī)范的,盡量避免這樣的寫法。

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',
)

總結(jié)了這個GNU C command line options 使用的套路,命令使用起來就更溜了,不會懵逼為什么linux下各種工具使用的案例寫法“千奇百怪”了。

在C里面并不支持短選項和值用等號連接,在PHP里卻是可以的,需要注意。

111

以上就是PHP中如何通過getopt解析GNU C風(fēng)格命令行選項的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!

網(wǎng)站名稱:PHP通過getopt解析GNU編譯風(fēng)格的方法
本文網(wǎng)址:http://www.rwnh.cn/article14/psjode.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、移動網(wǎng)站建設(shè)、Google、微信小程序、全網(wǎng)營銷推廣關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
安西县| 长葛市| 平果县| 慈利县| 宜良县| 平邑县| 廊坊市| 崇州市| 太保市| 嘉义市| 上林县| 吐鲁番市| 出国| 焉耆| 东台市| 乌兰察布市| 板桥市| 沾益县| 新乡市| 正宁县| 克拉玛依市| 中牟县| 旬阳县| 新绛县| 盐源县| 宁夏| 兰溪市| 中江县| 平安县| 万盛区| 白玉县| 宁晋县| 科技| 秦皇岛市| 潜江市| 大安市| 曲阳县| 贺州市| 博客| 仁怀市| 连山|