[英]PHP function - compare with the following examples
请清楚解释。
function inc(&$value, $amount = 1) { $value = $value + $amount; echo $value; //21 } $val = 20; inc($val); echo "<br>$val"; //21 echo "<hr>"; function incSec(&$value, $amount = 1) { $value = $value + $amount; echo $value; //21 } incSec($valSec = 20); echo "<br>$valSec"; //20
我正在尝试测试,但无法找到原因。
首先,您发布的第二个示例将以相反的方式输出:函数内部为“ 21”,主体为“ 20”-自己进行测试。
现在,对于感叹号...首先,增量量将始终为1,因为您没有向函数传递显式量。
在第一个示例中,您为变量分配了一个值,然后通过引用将该变量传递给函数,并在函数中增加了该值。 该函数将接收参数“ 20”,将其递增(默认)数量1,并输出结果-“ 21”。 函数返回后,该值(通过引用传递)现在增加-并打印另一个“ 21”。
在第二个示例中,将20分配给变量,然后将分配结果传递给函数。 结果将为20,但它将在内存中为其他位置。 从函数的角度来看,它仅接收值为20的by-ref参数,将其递增并打印结果-因此,您得到的值为“ 21”。 当函数返回时,您将打印变量的值(该变量的值从未传递给该函数(因此永不递增)),因此得到“ 20”的打印结果。
怀疑这些行出现错误:
incSec($valSec = 20);
这不是将$ valSec传递给函数,而是将20的赋值结果传递给$ valSec(通常是成功的赋值)。 该结果的值为20(假设成功),但这不是变量,仅是结果。
您的incSec函数()定义为期望通过引用传递的变量,但是您只能引用变量,而不能引用结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.