函数调用中的变量赋值


Variable assignment in function call

我继承了一个php代码库,其中包含函数调用中的一些变量赋值:

<?php
function some_func($foo, $state) {
  ....
}
some_func("random stuff", $state = true);
...
some_func("other stuff", $state = false);
...
?>

我做了一些研究和一些测试,但我无法找出 PHP 中此代码的定义行为是什么。

如何计算要some_func()的第二个参数的值?4state 变量的内容(第一次调用时为真,第二次调用为假)?还是赋值的结果(即将true/false分配给变量$state成功,因此some_func收到true

全局范围内$state变量的值是多少?赋值的结果,即第一次调用后为真,第二次调用后为假?

我也不得不使用具有与此类似的函数调用的代码库。幸运的是,我可以访问编写代码的开发人员。这是我学到的。

场景 1:

只是记录代码的一种方式。您知道要传递到函数中的变量名称。

场景 2:

这是一个链接:http://www.php.net/manual/en/language.references.pass.php如果您看到,他们确实会特别指出您的情况:

foo($a = 5); // Expression, not variable

一个"虚拟"的传递参考。根据您的 PHP 版本,它可能会引发警告。我得到这个:Strict Standards: Only variables should be passed by reference in ...

现在让我详细介绍一下在这种情况下发生的事情。

危险的是,您提供的示例不会显示"陷阱!"行为。在这种情况下,您在函数外部回显的$arg2将始终是函数调用中的表达式设置的。此外,正在调用的函数也将收到该值的"副本",并使用该值。我说"复制"是因为即使函数需要按引用传递,它实际上也会获得副本,类似于普通函数参数会得到的副本。

如果您修改函数内部的$arg2,它不会修改函数外部的$arg2,就像您对按引用传递的函数所期望的那样。

要在函数调用时赋值变量,必须将其作为引用传递(&$var):

function my_function($arg1, &$arg2) {
  if ($arg1 == true) {
    $arg2 = true;
  }
}
my_function(true, $arg2 = false);
echo $arg2;

输出 1(真)

my_function(false, $arg2 = false);
echo $arg2;

输出 0(假)

如何计算 some_func() 的第二个参数的值?

它不是"计算"的,而是显式设置的:$state = true / false然后作为参数传递给some_func()

全局范围内 $state 变量的值是多少?

$state在全局范围内不存在。