PHP 问题:通过引用传递
问题
考虑以下:
function doSomething(&$val) { $val++; } $a = 1; doSomething($a);
变量$a现在等于什么?
回答
这里的答案是“2”,因为变量$a是通过引用传递给doSomething()函数的。通过引用传递变量意味着您不会像通常那样传递变量的值,而是传递变量本身(或至少是对它的引用)。因此,函数内部该变量发生的任何事情都会影响外部变量,因为它们指向同一位置。
Mihai在评论中询问是否在PHP5.3中不推荐使用&字符,答案是在某些情况下。上面的函数调用很好,因为函数声明本身包含按引用传递的定义。PHP5.3中已弃用的是通过将变量作为引用传递来以相反的方式执行上述示例,如下所示:
function doSomething($val) { $val++; } $a = 1; doSomething(&$a);
这仍然产生与原始函数相同的结果,但它也会抛出一个已弃用的“调用时传递引用”通知,如下所示。
Deprecated:Call-timepass-by-referencehasbeendeprecatedinsomething.phponlinex
因此,您肯定应该摆脱在代码中按引用传递调用时的习惯,但我认为正常的按引用传递不会随处可见,因为它非常有用。