您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關PHP如何使用getopt()函數,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
其實就是這樣一個簡單的函數,我們就可以像 Linux 的命令選項一樣獲取指定的命令值。而且不是像 $argv 按空格進行分隔,命令選項函數會將這些命令選項封裝成數組,組成以選項名為鍵,以等號后面的內容為值的數組,更加方便我們的使用。
// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('a:b:c:d:e:f:')); // Array // ( // [b] => 2 // [c] => 3 // [d] => 4 // )
是不是很神奇,而且非常直觀吧,我們直接就拿到了 b 、 c 、d 的內容并且是格式非常清晰的鍵值數組形式。有同學要問了,a 和 e 呢?還有后面的 ccc 、 ddd 呢?
首先要說明的是,ccc 和 ddd 不是標準的選項參數,也就是說,這個函數接收的內容是以 - 開頭的選項,所以 ccc 和 ddd 不會在這里輸出,并且需要注意的是,非選項參數會中斷選項參數的獲取,在 ccc 之后如果繼續添加 - 開頭的選項也是無法獲取到的,這個我們后面還會看到。而 -- 開頭的選項參數呢?我們直接看下面的長選項功能。
// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('', ['a:','b:','c:','d:','e:','f:'])); // Array // ( // [a] => 1 // [e] => 5 // )
沒錯,getopt() 函數的第二個參數就是定義這種 -- 開頭的長選項的,而且需要注意的是,第一個參數是字符串類型,第二個長選項參數是數組類型的。那么我們把它們結合起來,就當然可以獲取到全部的參數信息啦!
// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('a:b:c:d:e:f:', ['a:','b:','c:','d:','e:','f:'])); // Array // ( // [a] => 1 // [b] => 2 // [c] => 3 // [d] => 4 // [e] => 5 // )
OK,參數選項獲取沒問題了吧,細心的同學肯定又發現了一個問題,這個 getopt() 函數的參數中定義的選項名稱后面為啥都要加個冒號?這就涉及到我們的冒號規則了,請直接往下看。
getopt() 的前兩個參數都支持一套關于選項獲取的規則:
單獨的字符(不接受值)
后面跟隨冒號的字符(此選項需要值)
后面跟隨兩個冒號的字符(此選項的值可選)
我們還是直接通過代碼來看一下。
// 一 // php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('abcdef')); // Array // ( // [b] => // [c] => // [d] => // ) // 二 // php 如何獲取PHP命令行參數.php -f print_r(getopt('f::')); // Array // ( // [f] => // ) print_r(getopt('f:')); // Array // ( // ) // 三 // php 如何獲取PHP命令行參數.php -f 22 print_r(getopt('f::')); // Array // ( // [f] => // ) print_r(getopt('f:')); // Array // ( // [f] => 22 // ) // 四 // php 如何獲取PHP命令行參數.php -f=22 print_r(getopt('f::')); // Array // ( // [f] => 22 // ) print_r(getopt('f:')); // Array // ( // [f] => 22 // )
這一段比較長,我們一塊一塊來看。首先是不帶冒號的 abcdef 寫法,返回的數組中都包含鍵,但沒有值,對應上面的規則就是不接受這些參數選項的值,你傳了這些參數選項也是只有鍵名而內容是空的。
第二段是定義了一個參數,但是不給值,這時,雙冒號 :: 會有鍵名,而單冒號 : 則什么都沒有。
第三段是空格形式的選項值,雙冒號 :: 有鍵名但沒有值,單冒號 : 鍵值正常。
第四段是等號 = 形式的選項值,單雙冒號都正常接收到鍵值。
上文中我們提到過參數中斷的問題,就是在選項參數之后如果有一個非選項參數的參數出現,getopt() 就無法再獲取到這個非選項參數后面的所有內容了。
// php 如何獲取PHP命令行參數.php -f=22 aa -b=33 // 選項的解析會終止于找到的第一個非選項,之后的任何東西都會被丟棄。 // Array // ( // [f] => 22 // )
通過這個測試可以清晰的看出后面的 b 選項無法獲取。這時,如果我們想知道選項參數在什么地方或者因為哪個參數而中斷的話,就可以使用 getopt() 函數的第三個參數了。
// php 如何獲取PHP命令行參數.php -f=22 aa -b=33 $optind = null; getopt('f:b:', [], $optind); echo $optind, PHP_EOL; // 返回中斷位置的索引值,2 echo $argv[$optind], PHP_EOL; // 等同于 $argv 的索引順序,aa
注釋已經寫得很清晰了,第三個參數會回調一個參數選項中斷位置的索引,并且這個索引是和 $argv 的索引順序位置一致的。
關于“PHP如何使用getopt()函數”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。