2

我很习惯 PHP5 但必须编写一个 PHP4 同步脚本,现在我正在做一些挖掘以找出 PHP5 和 4 之间的差异。问题是我有很多矛盾,一些网站告诉我 PHP4 没有 byref不管和其他人告诉我这个问题只发生在使用 foreach 时..

澄清一个例子:

function doSomething()
{
    $aMyAr = array();
    $oUser = new User();

    addUser($aMyAr, $oUser);
}

function addUser($aDestArray, $oUser)
{
    $aMyAr[] = $oUser;
}

我知道你会想为什么不自己运行这个脚本并 echo/print_r 输出呢?好吧,由于某些原因,PHP4 无法在最新的 WAMP/XAMPP 中运行(是的,我尝试了一堆据说兼容的 apache 版本......)

4

1 回答 1

3

只是,在 PHP4 中,对象被默认复制,而在 PHP5 中,它们被默认视为引用。IE:

$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 一样,您只需要通过引用显式传递函数参数,即:

function someFunc(& $someObject) {
  $someObject->prop = "changed";
}

someFunc($a);
echo $a->prop; # prints "changed"

因此,PHP4 面向对象的代码到处&都是(在过去编写真正的 OO 代码,这变得非常烦人!)。

另一个例子是通过引用分配。$b =& $aPHP4 中的对象与$b = $aPHP5 中的 simple 一样。

最后,通过引用返回。如果您在函数内创建一个对象并想要返回它(而不是返回它的副本),则必须使用 定义该函数&,即function &someFunc() {}.

同样,PHP 文档解释了语法。到目前为止,最好的办法就是不要使用 PHP4!

于 2011-05-31T21:02:44.410 回答