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

Pass undefined index into PHP function

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

function name( param1 = default, param2 = default, param3 = default) {...}

我通过将数组元素作为参数传递来调用函数,如下所示:

name( $param['foo'], $param['bar'], $param['hello'] );

我的问题是——如果函数调用中传递的一个(或多个)元素未定义,函数本身如何处理它?我问是因为我正在尝试调用该函数,但我无法知道是否定义了任何元素。

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


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

两条规则给你:

  • Pass/use 只定义了东西
  • 从不禁用 warnings/errors

示例:

$params = ['foo' => 1, 'bar' => null, 'nextKey' => null];

一种常见的方法是传递(子)数组:

myMethod($params);

您的方法采用了它需要的元素。

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

该函数通常没有线索,通常也不关心参数来自何处。例如

$x = 2;
foo($x);
foo(2);

foo()而言,它只会看到2进来,什么也不会告诉它"this 2 was hardcoded"或"this 2 was passed in via a variable"。

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