我正在使用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上工作答案 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源代码中过时的代码。