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