PHP 可选参数



我对可选参数或一般在函数中设置参数有点困惑。所以我找到了这个例子:

<?php
function makecoffee($type = "cappuccino")
{
return "Making a cup of $type.n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
?>

我不明白为什么echo makecoffe("浓缩咖啡"(返回浓缩咖啡而不是卡布奇诺。调用该方法时不会覆盖浓缩咖啡吗?在我的脑海中$type首先是浓缩咖啡,但随后会设置为卡布奇诺,因为它发生在调用该方法之后。很难解释我的意思,但是只有在没有参数时才调用$type = "cappuccino"或者为什么会发生这种情况?与

function makecoffee($type = null)
{
}
echo makecoffe("espresso");

为什么这会返回浓缩咖啡而不是 null,即使调用函数时类型设置为 null?

告诉您函数中的 php 参数究竟是如何工作的好例子,是将所有传递的参数返回给函数的func_get_args()

这将是我们的示例函数。

function foo($example = 'default')
{
print_r(func_get_args());
}

现在我们可以检查是否有任何参数传递给函数。

如果我们不传递任何参数会发生什么?

foo();
// Output
Array
(
)

我们知道调用该函数时没有任何参数,因为输出数组为空。 这就是将默认值用于我们的函数参数的时刻。因此,最终$example参数的值将等于'default'

现在我们将尝试将 2 个参数传递给函数。

foo('example', 'unnecessary');
// Output
Array
(
[0] => example
[1] => unnecessary
)

从这个例子中,我们可以推断出我们可以传递任意数量的参数而不会看到异常。这是 php 功能之一。

但是哪个传递给$example参数?

正如 php 文档所告知的那样。

参数从左到右计算。

我们示例的左侧是索引为 0 的数组中的值,右侧是最后一个元素(实际上是索引 1(

因此,在$example下,我们'example'价值。

在默认值中,第二个参数将被忽略,因为我们的函数没有相应的第二个参数。

如果我们把null作为论据传递呢?

这可能很棘手,因为我们可以想象以null作为参数调用的函数会影响我们的函数,因为调用的函数没有任何参数。

没有更多的错误。

foo(null);
// Output
Array
(
[0] =>
)

现在你应该看到这一点。尽管我们的参数是null的,但值被传递到我们的函数中并覆盖了参数的默认'example'值。最后$example参数将等于null

这是因为函数声明中的$param = 'value'位不会在每次调用函数时执行。

仅当您不为该参数传递值时,它才会发挥作用。

PHP不是将其视为文字赋值,而是在进入您的函数时在引擎盖下执行类似以下内容的操作。

if true === $param holds no value
$param = 'value'
endif

换句话说,$param = 'value'不是语言上下文中的文字表达式,而是一种语言构造,用于定义实现回退默认值的所需行为。

编辑:请注意,上面的代码片段故意只是伪代码,因为一旦 PHP 编译完毕,就很难准确表达使用 PHP 的内容。有关详细信息,请参阅评论。

相关内容

  • 没有找到相关文章