PHP通過(guò)getopt解析GNU編譯風(fēng)格的方法-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)視覺(jué)設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、營(yíng)銷(xiāo)網(wǎng)站、網(wǎng)站程序開(kāi)發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司、手機(jī)網(wǎng)站開(kāi)發(fā)、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)、WEB系統(tǒng)開(kāi)發(fā)、域名注冊(cè)、國(guó)內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測(cè)試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為廣告設(shè)計(jì)行業(yè)客戶提供了網(wǎng)站設(shè)計(jì)服務(wù)。

比如使用命令wget下載文件時(shí),使用下面的一些方式來(lái)指定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時(shí),-O對(duì)應(yīng)--output-document。

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

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

● 短選項(xiàng)名用單個(gè)連字符(-)開(kāi)始

● 短選項(xiàng)可以一個(gè)-后面跟多個(gè)選項(xiàng)名

● 長(zhǎng)選項(xiàng)和短選項(xiàng)可以有映射關(guān)系,也可以沒(méi)有

● 長(zhǎng)選項(xiàng)名,則是多字節(jié)的的,兩個(gè)連字符(--)開(kāi)始

● 選項(xiàng)與實(shí)參之間,可以直接連接,也可以用空格隔開(kāi),還可以用等號(hào)連接

● 但是短選項(xiàng)用等號(hào)連接值,等號(hào)會(huì)被視為值的一部分(但是在 php 里面卻又兼容了這一點(diǎn))

● 選項(xiàng)分為沒(méi)有值,必須傳值,可選傳值(也就是可傳可不傳)

在 PHP 中的使用

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

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

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

php里面缺少結(jié)構(gòu)體的支撐,相比c的長(zhǎng)選項(xiàng)的配置更加簡(jiǎn)潔,但也缺少了長(zhǎng)短選項(xiàng)的映射關(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ù)和長(zhǎng)參數(shù)是對(duì)應(yīng)的,但是沒(méi)有數(shù)據(jù)結(jié)構(gòu)來(lái)表示他們的對(duì)應(yīng)關(guān)系(在C里面有option結(jié)構(gòu)體來(lái)做這個(gè)對(duì)應(yīng)關(guān)系的管理),所以我們兩個(gè)都傳的話,程序兩個(gè)值會(huì)收到,然后我們自己判斷短參數(shù)和長(zhǎng)參數(shù)使用哪個(gè)。

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

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

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é)了這個(gè)GNU C command line options 使用的套路,命令使用起來(lái)就更溜了,不會(huì)懵逼為什么linux下各種工具使用的案例寫(xiě)法“千奇百怪”了。

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

111

以上就是PHP中如何通過(guò)getopt解析GNU C風(fēng)格命令行選項(xiàng)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司其它相關(guān)文章!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章題目:PHP通過(guò)getopt解析GNU編譯風(fēng)格的方法-創(chuàng)新互聯(lián)
鏈接URL:http://muchs.cn/article40/egsho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)網(wǎng)站排名、動(dòng)態(tài)網(wǎng)站網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司用戶體驗(yàn)

廣告

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

成都網(wǎng)站建設(shè)公司