我已经习惯了PHP5但是必须编写一个PHP4同步脚本,现在我正在做一些挖掘以找到PHP5和4之间的差异。问题是我得到了很多矛盾,有些网站告诉我PHP4没有byref什么,其他人告诉我这个问题只发生在使用foreach ..
澄清一个例子:
function doSomething()
{
$aMyAr = array();
$oUser = new User();
addUser($aMyAr, $oUser);
}
function addUser($aDestArray, $oUser)
{
$aMyAr[] = $oUser;
}
我知道你会想到为什么不自己运行这个脚本并回显/ print_r输出?好吧,由于某些原因,PHP4将无法在最新的WAMP / XAMPP中运行(是的,我尝试了一些据称兼容的apache版本...)
答案 0 :(得分:3)
改变只是在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!