如何解决PHP4参数是否通过引用?
| 我已经习惯了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版本...)
解决方法
所做的更改只是在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一样工作,您只需要通过引用显式传递函数自变量即可,即:
function someFunc(& $someObject) {
$someObject->prop = \"changed\";
}
someFunc($a);
echo $a->prop; # prints \"changed\"
因此,PHP4面向对象的代码到处散布着3英镑(在白天写出真正的OO代码,这很烦人!)。
另一个示例是通过引用分配。 $b =& $a
处理PHP4中的对象,简单的$b = $a
处理PHP5中的对象。
最后,通过引用返回。如果在函数内部创建对象并想返回它(而不是返回它的副本),则必须使用&
(即function &someFunc() {}
)定义该函数。
同样,PHP文档解释了该语法。到目前为止,最好的事情就是不要使用PHP4!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。