我继承了一个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分配true / false是否成功,所以some_func收到了真的?
我也不得不使用具有与此类似的函数调用的代码库.幸运的是,我可以访问编写代码的开发人员.这是我学到的.
场景1:
场景2:
这是一个链接:http://www.php.net/manual/en/language.references.pass.php
如果你看到,他们会专门提出你的情况:
foo($a = 5); // Expression,not variable
一个’虚拟’pass-by-ref.根据您的PHP版本,它可能会发出警告.我得到了这个:严格的标准:只有变量应该通过引用传递给…
现在让我详细介绍这种情况下发生的情况.
危险的是你提供的例子不会显示“陷阱!”行为.在这种情况下,您在函数外部回显的$arg2将始终是函数调用中的表达式设置它.此外,被调用的函数也将被发送该值的“副本”,并使用它.我说“复制”是因为即使该函数需要pass-by-ref,它实际上也会获得一个副本,类似于普通函数参数.