1.使用argv数组
2.使用getopt方法
1.使用argv数组
例如:需要执行一个php,并传递三个参数(type=news, is_hot=1, limit=5)
创建test.php
print_r($argv);
?>
在命令行执行
php test.php news 1 5
输出:
Array
(
[0] => test.php
[1] => news
[2] => 1
[3] => 5
)
可以看到argv[0]为当前执行的php文件名称,而argv[1]~argv[3]则是传递的参数的值
argv[1]等于type的值
argv[2]等于is_hot的值
argv[3]等于limit的值
这样可以根据argv数组来获取传递的参数进行后续的处理操作。
缺点:
使用argv数组,可以按顺序获取传递的参数。但获取后,需要做一个对应处理,上例中需要把argv[1]对应type参数,argv[2]对应is_hot参数,argv[3]对应limit参数。而如果在传递的过程中,参数顺序写错,则会导致程序出错。
例如:
$param = array();
$param['type'] = $argv[1];
$param['is_hot'] = $argv[2];
$param['limit'] = $argv[3];
print_r($param);
?>
执行
php test.php news 1 5
输出:
Array
(
[type] => news
[is_hot] => 1
[limit] => 5
)
而传递顺序不同,获取到的参数数值会不同,导致后续程序出错
执行
php test.php 1 5 news
1
输出:
Array
(
[type] => 1
[is_hot] => 5
[limit] => news
)
因此在使用argv数组传递参数时,需要注意参数传递的顺序。
2.使用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
// )