par*_*ark 7 php parameters function parameter-passing optional-parameters
我正在使用一个签名看起来像这样的函数
afunc(string $p1, mixed $p2, array $p3 [, int $p4 = SOM_CONST [, string $p5 ]] )
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我没有最后一个参数$p5
传递的数据,但为了保持一致性,我仍然希望传递类似的东西NULL
.所以我的问题,PHP是否将传递NULL 与传递任何内容完全相同?
somefunc($p1, $p2, $p3, $p4 = SOM_CONST);
somefunc($p1, $p2, $p3, $p4 = SOM_CONST, NULL);
Run Code Online (Sandbox Code Playgroud)
不.大概,确切的签名是:
function afunc($p1, $p2, $p3, $p4 = SOM_CONST)
Run Code Online (Sandbox Code Playgroud)
并且函数使用func_get_arg
或func_get_args
for $p5
.
func_num_args
根据您是否传递NULL将有所不同.如果我们这样做:
{
echo func_num_args();
}
Run Code Online (Sandbox Code Playgroud)
然后
afunc(1,2,3,4,NULL);
Run Code Online (Sandbox Code Playgroud)
和
afunc(1,2,3,4);
Run Code Online (Sandbox Code Playgroud)
给5和4.
这取决于是否处理这些相同的功能.
不.如果参数的默认值是NULL
,则它是相同的,否则不是:
function a($a, $b, $c = 42) {
var_dump($c);
}
a(1, 2, NULL);
Run Code Online (Sandbox Code Playgroud)
打印NULL
.
所以你不能说它总是一样的.NULL
只是另一个价值,并不是那么特别.
更不用说非可选参数:调用a(1)
会给你一个错误(警告),但a(1,NULL)
有效.
传递NULL
的正是一样不传递一个参数-如果默认值是NULL
,除了在上下文func_num_args
功能:
返回传递给函数的参数数量。
<?php
function test($test=NULL) {
echo func_num_args();
}
test(); //outputs: 0
test(NULL); //outputs: 1
?>
Run Code Online (Sandbox Code Playgroud)