千家信息网

PHP如何使用getopt()函数

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关PHP如何使用getopt()函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。getopt() 从命令行参数列表中获取选项其实就是这样
千家信息网最后更新 2026年11月02日PHP如何使用getopt()函数

这篇文章将为大家详细讲解有关PHP如何使用getopt()函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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 -fprint_r(getopt('f::'));// Array// (//     [f] => // )print_r(getopt('f:'));// Array// (// )// 三// php 如何获取PHP命令行参数.php -f 22print_r(getopt('f::'));// Array// (//     [f] => // )print_r(getopt('f:'));// Array// (//     [f] => 22// )// 四// php 如何获取PHP命令行参数.php -f=22print_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; // 返回中断位置的索引值,2echo $argv[$optind], PHP_EOL; // 等同于 $argv 的索引顺序,aa

注释已经写得很清晰了,第三个参数会回调一个参数选项中断位置的索引,并且这个索引是和 $argv 的索引顺序位置一致的。

关于"PHP如何使用getopt()函数"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

参数 命令 冒号 函数 内容 数组 索引 字符 就是 开头 规则 位置 形式 篇文章 问题 三个 两个 同学 更多 空格 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 金诺互联网科技 港股互联网科技股 金融科技与互联网金融 广州互联网络科技有限公司 苏州互联网科技贷款公司 互联网科技论坛 亿人帮互联网科技 海南购全球互联网科技 银川新华互联网科技学校地址 互联网科技公司需要的职位 互联网科技教育视频 国大互联网教育科技有限公司工作 广州富喜互联网络科技 富国互联网金融科技混合基金 广东鹅鹅鹅互联网科技有限公司 容联科技互联网电商 互联网金融金融科技 10位科技互联网大佬 长沙易易互联网科技有限公司 重庆科技产业互联网有哪些 上海卓越科技互联网 科技互联网企业 互联网科技革命 青岛中康互联网医疗科技有限公司 无锡工业互联网科技有限公司 2021互联网科技公司排名 伍佰万互联网科技怎么赚钱 四川互联网展示科技馆设计 安徽九吞吴互联网科技有限公司 银川新华互联网科技学校招聘
0