PHP返回引用 - '&'来电者有必要吗?

时间:2011-12-13 14:27:03

标签: php joomla reference

我正在使用joomla并且我已阅读API并且我注意到具有函数的JFactory类返回对该对象的引用,但我从互联网收集的示例在使用时不使用&功能

比如说Jfactory::getSession(),它返回对全局会话的引用。 documentation显示其定义为function &getSession(params){code} - 明确定义参考回报。但是,in this example,他们将其称为$session = JFactory::getSession();,不应该是$session =& JFactory::getSession();吗?

它在php documentation中说明函数中有&,调用者中有=&。我也经历过C编程,如果我想念这样的事情,就会出现“无效指针转换”这样的错误 - 这不是一个容忍的好编程习惯。

什么是正确的做法?

其他信息:

我使用joomla 1.7,我正在创建一个组件。我使用php 5.3.8

在xampp上工作

1 个答案:

答案 0 :(得分:1)

取决于:
- Joomla的版本和您使用的PHP版本 - 什么返回JFactory :: getSession()方法

Joomla 1.5版兼容PHP 4和PHP 5,版本1.6和1.7仅与PHP 5兼容。

如果方法返回一个对象,则{4}中必须使用&:默认情况下,对象按值传递/返回(对象的副本出现)。 &可以避免复制 在PHP 5中,&是无用的:对象总​​是通过引用传递/返回(不会发生复制)。

如果该方法返回任何其他内容,则不应使用&,但在某些非常罕见的情况下可能很有用(例如,如果您有一个巨大的数组或字符串,则可以节省内存)不希望在作业中复制它们。)

好的做法是,当方法签名也包含&时,始终将&置于作业中。

在您的情况下,我认为您使用的是PHP 5和最新版本的Joomla,因此请不要使用&:这可能是Joomla源代码中过时的代码。