这是PHP的标准行为吗?

时间:2010-06-30 02:18:08

标签: php syntax

这在没有警告的情况下有效:

function test($a)
{
    echo 1;
}
test(2, 1);

这会引起警告:

function test($a)
{
    echo 1;
}
test();

如果是标准的,有什么理由吗?

3 个答案:

答案 0 :(得分:15)

因为在第一个示例中test()可能使用func_get_args()来访问其参数,所以它不应该抛出错误。

在第二个示例中,$a不是可选的。如果您希望它是可选的,请在参数签名中添加默认值,如此

function test($a = 1)
{
    echo 1;
}
test();

所以是的,它是默认行为,一旦你知道了上述内容就有意义了。

关于编辑

在第一个编辑过的示例中,您可以2访问$a,但1只能通过func_get_args()访问 }(或其类似函数之一,如func_get_arg())。

答案 1 :(得分:1)

这是正确的行为。你的函数声明表明它期待一个参数。如果要使函数参数可选,则应应用默认值。否则你会引发异常。阅读Function Arguments上的PHP文档,了解有关如何声明函数以及传递值的方法的完整详细信息。

[编辑]这应该对你有用:

function test($a = null)
{
    echo 1;
}
test();

答案 2 :(得分:0)

我只是在猜测,但是一个没有接收到它预期参数的函数可能比接收一个可以安全忽略的额外参数的函数更危险。

另外,我想知道它是否可能与PHP允许你声明参数值的默认值这一事实有关,所以警告可能是为了防止你忘记给$ aa默认值的情况< / p>