我很习惯PHP5,但我不得不写一个PHP4同步脚本,现在我正在做一些挖掘,以找出PHP5和4之间的差异。问题是我得到了很多矛盾,一些网站告诉我PHP4没有任何引用,而另一些网站告诉我这个问题只在使用foreach时发生。
为了澄清一个示例:
function doSomething()
{
$aMyAr = array();
$oUser = new User();
addUser($aMyAr, $oUser);
}
function addUser($aDestArray, $oUser)
{
$aMyAr[] = $oUser;
}我知道您会想,为什么不自己运行这个脚本并回显/print_r输出呢?好吧,由于某些原因,PHP4不能在最新的WAMP/XAMPP中运行(是的,我尝试了大量据说兼容的apache版本……)
发布于 2011-06-01 05:02:44
唯一的变化是,在PHP4中,默认情况下会复制对象,而在PHP5中,默认情况下会将它们视为引用。即:
$a = new stdClass();
$a->prop = "original";
$b = $a;
$b->prop = "changed";
echo $a->prop;
# PHP4 outputs "original" because $a and $b are different objects
# PHP5 outputs "changed" because $a and $b are the same object在进行函数调用或使用foreach时,在PHP4中对象是复制的,而不是通过引用传递的。
要使PHP4函数参数的行为类似于PHP5,您只需显式地执行pass function arguments by reference,即:
function someFunc(& $someObject) {
$someObject->prop = "changed";
}
someFunc($a);
echo $a->prop; # prints "changed"因此,PHP4面向对象的代码到处都是& (在过去编写真正的OO代码,这非常令人厌烦)。
另一个例子是按引用赋值。$b =& $a在PHP4中处理对象的方式与简单的$b = $a在PHP5中的方式相同。
最后,通过引用返回。如果你在一个函数中创建了一个对象并想要返回它(而不是返回它的一个副本),你必须用&来定义这个函数,即function &someFunc() {}。
同样,PHP docs解释语法。到目前为止,最好的办法就是不要使用PHP4!
https://stackoverflow.com/questions/6193352
复制相似问题