我有一个看起来像这样的函数:
function name( param1 = default, param2 = default, param3 = default) {...}
我通过将数组的元素作为参数传递来调用函数:
name( $param['foo'], $param['bar'], $param['hello'] );
我的问题是 - 如果函数调用中传递的一个(或多个)元素未定义,那么它是如何在函数本身内处理的?我问,因为我试图调用函数,但我无法知道是否定义了任何元素。
在函数内部,我尝试使用isset()
,is_null()
和empty()
调试传递的参数,我分别得到false,true和true。这让我相信,由于实际传入了某些内容,因此未设置默认值。如果有人能解释如何处理这样的事情,我将不胜感激。
答案 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将发出关于使用未定义变量的警告,在函数代码有机会开始执行之前