有一段时间一直迷惑于php中引用的传递,后来查手册及c源程序,并反复测试,大致对引用传递在内存中的模式有了一定的了解,后来为了加深印象,写了个总结,应该不会有大的问题——当然这是在php4中,在以后的版本中可能会有变化。当时写总结的时候,想锻炼一下英语,因此就凑合了一篇。不过本人英语不好,也懒得翻译,反正当时想自己看得懂就行了。今天心血来潮,突然觉得还蛮有用的,于是在这里现丑了,请大家指正。那位看得懂的帮忙翻译一下吧,我没空了。
var =& $arg;
}
function passbyref(&$arg){
$this->var = $arg;
}
function setbyval($arg){
$this->var = $arg;
}
function &getbyref(){
return $this->var;
}
function getbyval(){
return $this->var;
}
}
$o = new getsettest;
println(============ setbyref getbyref =============);
println(-----------------before change----------------);
$in = before change;
$o->setbyref($in);
$outbyval = $o->getbyref();
$outbyref =& $o->getbyref();
println(\$in: .$in);
println(\$outbyval: .$outbyval);
println(\$outbyref: .$outbyref);
println(\$this->var: .$o->var);
println(-----------------after change-----------------);
$in = after change;
println(\$in: .$in);
println(\$outbyval: .$outbyval);
println(\$outbyref: .$outbyref);
println(\$this->var: .$o->var);
println();
println(============ setbyref getbyval =============);
println(-----------------before change----------------);
$in = before change;
$o->setbyref($in);
$outbyval = $o->getbyval();
$outbyref =& $o->getbyval();
println(\$in: .$in);
println(\$outbyval: .$outbyval);
println(\$outbyref: .$outbyref);
println(\$this->var: .$o->var);
println(-----------------after change-----------------);
$in = after change;
println(\$in: .$in);
println(\$outbyval: .$outbyval);
println(\$outbyref: .$outbyref);
println(\$this->var: .$o->var);
println();
println(============ passbyref getbyval =============);
println(-----------------before change----------------);
$in = before change;
$o->passbyref($in);
$outbyval = $o->getbyval();
$outbyref =& $o->getbyval();
println(\$in: .$in);
println(\$outbyval: .$outbyval);
println(\$outbyref: .$outbyref);
println(\$this->var: .$o->var);
println(-----------------after change-----------------);
$in = after change;
println(\$in: .$in);
println(\$outbyval: .$outbyval);
println(\$outbyref: .$outbyref);
println(\$this->var: .$o->var);
println();
/*
以下输出结果是我(夜猫子)擅自编辑添加的,主要是为后来人查看方便加在这里,越肉代庖,向longnetpro致歉
输出结果:
============ setbyref getbyref =============
-----------------before change----------------
$in: before change
$outbyval: before change
$outbyref: before change
$this->var: before change
-----------------after change-----------------
$in: after change
$outbyval: before change
$outbyref: after change
$this->var: after change
============ setbyref getbyval =============
-----------------before change----------------
$in: before change
$outbyval: before change
$outbyref: before change
$this->var: before change
-----------------after change-----------------
$in: after change
$outbyval: before change
$outbyref: before change
$this->var: after change
============ passbyref getbyval =============
-----------------before change----------------
$in: before change
$outbyval: before change
$outbyref: before change
$this->var: before change
-----------------after change-----------------
$in: after change
$outbyval: before change
$outbyref: before change
$this->var: after change
*/
?>