在 PHP 5 中,您是否需要使用&
修饰符通过引用传递?例如,
class People() { }
$p = new People();
function one($a) { $a = null; }
function two(&$a) { $a = null; )
在 PHP4 中你需要&
修改器来在更改后维护引用,但我对我读过的有关 PHP5 自动使用引用传递的主题感到困惑,除非显式克隆对象。
在 PHP5 中,是 &
所有类型的对象(变量、类、数组……)都需要通过引用传递修饰符吗?
您是否需要使用 & 修饰符来传递引用?
从技术/语义上来说,答案是yes,即使有物体。这是因为有两种方法可以传递/分配对象:通过引用或通过标识符。当函数声明包含&
, as in:
function func(&$obj) {}
无论如何,参数都将通过引用传递。如果您声明时没有&
function func($obj) {}
除了对象和资源之外,所有内容都将按值传递,然后通过标识符。什么是标识符?嗯,你可以把它看作是对参考的参考。举个例子:
class A
{
public $v = 1;
}
function change($obj)
{
$obj->v = 2;
}
function makezero($obj)
{
$obj = 0;
}
$a = new A();
change($a);
var_dump($a);
/*
output:
object(A)#1 (1) {
["v"]=>
int(2)
}
*/
makezero($a);
var_dump($a);
/*
output (same as before):
object(A)#1 (1) {
["v"]=>
int(2)
}
*/
那么为什么不呢$a
传递给之后突然变成一个整数makezero
?这是因为我们只覆盖了标识符。如果我们路过参考:
function makezero(&$obj)
{
$obj = 0;
}
makezero($a);
var_dump($a);
/*
output:
int(0)
*/
Now $a
是一个整数。所以,通过通过之间存在差异标识符并经过参考.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)