传递NULL参数与传递无参数完全相同

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)

Mat*_*hen 9

不.大概,确切的签名是:

function afunc($p1, $p2, $p3, $p4 = SOM_CONST)
Run Code Online (Sandbox Code Playgroud)

并且函数使用func_get_argfunc_get_argsfor $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.

这取决于是否处理这些相同的功能.

  • 一个 PHP 函数的真实例子:`substr($str, 1)` 与 `substr($str, 1, null)`。- “如果给定长度并且为 0、FALSE 或 NULL,将返回一个空字符串。” (2认同)

Fel*_*ing 7

不.如果参数的默认值是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)有效.


thi*_*dot 5

传递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)