why*_*eam 7 php variable-assignment
我继承了一个php代码库,其中包含函数调用中的一些变量赋值:
<?php
function some_func($foo, $state) {
....
}
some_func("random stuff", $state = true);
...
some_func("other stuff", $state = false);
...
?>
Run Code Online (Sandbox Code Playgroud)
我做了一些研究和一些测试,但我不知道这个代码在PHP中的定义行为是什么.
如何some_func()计算第二个参数的值?4state变量的内容(第一次调用时为true,第二次为false时为false)?或者它是分配的结果(即分配true/ false变量$state是否成功,所以some_func收到了true?
$state全局范围内变量的价值是多少?赋值的结果,即第一次调用后为true,第二次调用后为false?
我也必须使用具有与此类似的函数调用的代码库.幸运的是,我可以访问编写代码的开发人员.这是我学到的.
场景1:
只是一种记录代码的方法.您知道要传递给函数的变量名称.
场景2:
这是一个链接:http://www.php.net/manual/en/language.references.pass.php 如果你看到,他们会专门提出你的情况:
foo($a = 5); // Expression, not variable
Run Code Online (Sandbox Code Playgroud)
一个'虚拟'pass-by-ref.根据您的PHP版本,它可能会发出警告.我得到了这个:Strict Standards: Only variables should be passed by reference in ...
现在让我详细介绍这种情况下发生的情况.
危险的是你提供的例子不会显示"陷阱!" 行为.在这种情况下,您$arg2在函数外部回显的内容将始终是函数调用中的表达式设置它.此外,被调用的函数也将被发送该值的"副本",并使用它.我说"复制"是因为即使函数需要pass-by-ref,它实际上也会获得一个副本,类似于普通函数参数.
如果修改$arg2函数内部的函数,它将不会修改函数内部$arg2的函数,就像你期望从pass-by-ref函数那样.