函数调用中的变量赋值

时间:2013-11-14 09:23:32

标签: php variable-assignment

我继承了一个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时为false)?或者它是作业的结果(即将true / false分配给变量$state是否成功,因此some_func收到了true

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

2 个答案:

答案 0 :(得分:5)

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

情景1:

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

情景2:

这是一个链接:http://www.php.net/manual/en/language.references.pass.php 如果你看到,他们会专门提出你的案件:

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

'虚拟'pass-by-ref。根据您的PHP版本,它可能会发出警告。我得到了这个:Strict Standards: Only variables should be passed by reference in ...

现在让我详细说明在这种情况下发生的事情。

危险的是你提供的例子不会显示“陷阱!”行为。在这种情况下,您在函数外部回显的$arg2将始终是函数调用中的表达式设置它。此外,被调用的函数也将被发送该值的“副本”,并使用它。我说“复制”是因为即使该函数需要pass-by-ref,它实际上也会获得一个副本,类似于普通函数参数所能得到的。

如果修改函数内部的$arg2将不会修改函数外部的$arg2,正如您对函数所期望的那样是传递参考。

答案 1 :(得分:1)

要在函数调用时分配变量,您必须pass it as a reference&$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在全球范围内不存在。