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

时间:2015-08-19 21:00:43

标签: php parameter-passing argument-passing optional-parameters

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

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

我通过将数组的元素作为参数传递来调用函数:

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

适合您的两条规则:

  • 仅使用已定义的内容
  • 从不禁用警告/错误

示例:

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

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

myMethod($params);

您的方法采用所需的元素。

答案 2 :(得分:0)

该功能通常没有任何线索,并且通常不关心,有什么争论来自。 e.g。

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

foo()而言,它只会看到2进来,没有任何东西会告诉它"这2是硬编码的"或者"这个2是通过变量"传递的。

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