将未定义的索引传递到PHP函数中

将未定义的索引传递到PHP函数中,php,parameter-passing,argument-passing,optional-parameters,Php,Parameter Passing,Argument Passing,Optional Parameters,我有一个函数看起来有点像这样: function name( param1 = default, param2 = default, param3 = default) {...} name( $param['foo'], $param['bar'], $param['hello'] ); 我通过将数组元素作为如下参数传递来调用函数: function name( param1 = default, param2 = default, param3 = default) {...} nam

我有一个函数看起来有点像这样:

function name( param1 = default, param2 = default, param3 = default) {...}
name( $param['foo'], $param['bar'], $param['hello'] );
我通过将数组元素作为如下参数传递来调用函数:

function name( param1 = default, param2 = default, param3 = default) {...}
name( $param['foo'], $param['bar'], $param['hello'] );
我的问题是——如果函数调用中传递的一个(或多个)元素未定义,那么函数本身如何处理它?我这样问是因为我试图调用函数,但我无法知道是否定义了任何元素

在函数内部,我尝试使用
isset()
is_null()
empty()
调试通过的参数,结果分别为false、true和true。这使我相信,由于某些内容实际上正在传入,所以没有设置默认值。如果有人能解释一下这样的事情是如何处理的,我将不胜感激。


调用数组中未定义的索引会导致警告

对你来说有两条规则:

  • 仅传递/使用已定义的内容
  • 切勿禁用警告/错误
例如:

$params = ['foo' => 1, 'bar' => null, 'nextKey' => null];
一种常见的方法是传递(子)数组:


您的方法获取它需要的元素。

简单的回答是它正在传递NULL,NULL是一个指定为表示NULL或未初始化值的常量值

函数通常没有线索,也不关心参数来自何处。e、 g

$x = 2;
foo($x);
foo(2);
foo()
而言,它只会看到
2
进入,并且不会告诉它“这2是硬编码的”或“这2是通过变量传入的”


如果传入未定义的变量,则函数本身将看到一个
null
值到达,PHP将在函数代码有机会开始执行之前发出有关使用未定义变量的警告。

Hm,如果传入数组值,为什么不传递数组本身呢?可能是@bksi的副本这是完全可能的,但我在想,如果我确切知道我需要哪些数组元素,我还可以传递这些元素。你可以在传递方法后检查它们。只有在没有传递参数的情况下才使用默认值。如果你传递一个参数,它将被使用,即使它是未定义的。