php函数中,多个参数的情况下怎么使其中一个参数为默认值而其他的使用指定值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php函数中,多个参数的情况下怎么使其中一个参数为默认值而其他的使用指定值相关的知识,希望对你有一定的参考价值。

例如:
foo($a=1,$b=2,$c=3)
echo $a;
echo $b;
echo $c;


那么在调用foo的时候怎么能赋值给$a和$c.而$b为默认的2.

我知道这语法是错误的。例如,foo($a=4,$c=5)
比如foo中输出,
4 2 5
foo是个接口。我不能改动,只知道调用参数。

php不支持这种调用方式,你的需求是不能实现的。

如果你不能改动函数,那么你可以做一个封装。PHP的语法比较灵活,有几种替代方式你可以借鉴。这些例子都有广泛的应用。

示例一:如果参数值为null,则在函数里强制赋值为默认值

<?php
function foo2($a=1,$b=2,$c=3) 
    if ($a === null) $a=1;
    if ($b === null) $b=2;
    if ($c === null) $c=3;
    foo($a, $b, $c);

foo(1, null, 3);

示例二:使用数组参数

<?php
function foo3($array=array()) 
    extract($array);
    if (!isset($a)) $a=1;
    if (!isset($b)) $b=2;
    if (!isset($c)) $c=3;
    foo($a, $b, $c);

foo(array('a'=>1, 'c'=>3));


python是支持你所说的那种调用方式的:

def foo(a=1, b=2, c=3):
    pass
foo(a=1, c=3)

参考技术A 跨过中间的默认参数?
地球上目前么有任何编程语言能支持这种奇怪的调用方式。
也许可以利用反射做到这一点?
我不确定。
参考技术B <?php
function foo()

$numargs = func_num_args();
echo "Number of arguments: $numargs<br />\n";
if ($numargs >= 2)
echo "Second argument is: " . func_get_arg(1) . "<br />\n";

$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i++)
echo "Argument $i is: " . $arg_list[$i] . "<br />\n";



foo(1, 2, 3);
?>
参考技术C 不能做一个外套函数吗?
foo2($a=4,$c=5)
foo($a,2,$c);

foo2($a=4,$c=5)

php 中array_merge函数特性(其中一个参数为null)

需要合并两个从数据库中读取的数组,用php中的array_merge函数,最后结果总是为null,通过dump,发现这是由于其中的一个数组是null造成的。演示如下:

<?php

$arr1 =null;

$arr2 = array(‘tom‘,‘linken‘);

$arr3 = array_merge($arr1,$arr2);

var_dump($arr3);

运行的结果为null。

解决办法是可以在进行merge的时候把两个参数进行array强制类型转化;

如下:

<?php

$arr1 =null;

$arr2 = array(‘tom‘,‘linken‘);

$arr3 =array_merge((array)$arr1,(array)$arr2);

var_dump($arr3);

运行结果为:

array(2) { [0]=> string(3)"tom" [1]=> string(6) "linken" }

问题解决,这样就不用在代码中判断$arr1和$arr2是否为null了。

以上是关于php函数中,多个参数的情况下怎么使其中一个参数为默认值而其他的使用指定值的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中为函数定义带有常量变量的参数? [复制]

PHP函数中的可选参数不考虑顺序

python获取外部传入多个参数

if函数多个条件怎么用?

php函数多个参数实现传参任意顺序?

php正则表达怎么把一个字符串中的所有空格都转化为下划线