首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP4参数是否被引用?

PHP4参数是否被引用?
EN

Stack Overflow用户
提问于 2011-06-01 04:46:15
回答 1查看 757关注 0票数 2

我很习惯PHP5,但我不得不写一个PHP4同步脚本,现在我正在做一些挖掘,以找出PHP5和4之间的差异。问题是我得到了很多矛盾,一些网站告诉我PHP4没有任何引用,而另一些网站告诉我这个问题只在使用foreach时发生。

为了澄清一个示例:

代码语言:javascript
复制
function doSomething()
{
    $aMyAr = array();
    $oUser = new User();

    addUser($aMyAr, $oUser);
}

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

我知道您会想,为什么不自己运行这个脚本并回显/print_r输出呢?好吧,由于某些原因,PHP4不能在最新的WAMP/XAMPP中运行(是的,我尝试了大量据说兼容的apache版本……)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-01 05:02:44

唯一的变化是,在PHP4中,默认情况下会复制对象,而在PHP5中,默认情况下会将它们视为引用。即:

代码语言:javascript
复制
$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,即:

代码语言:javascript
复制
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!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6193352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档