2011-12-13 16 views
2

我正在使用joomla,並且已經通讀了API,並且我注意到具有函數的JFactory類返回對象的引用,但從互聯網收集的示例在使用函數時不使用&PHP返回引用 - '&'在調用者中是必需的?

說例如Jfactory::getSession(),它返回對全局會話的引用。 documentation顯示其定義爲function &getSession(params){code} - 明確定義參考回報。然而,in this example,他們稱它爲$session = JFactory::getSession();它不應該是$session =& JFactory::getSession();

它在php documentation中說明函數中有&,調用者中有=&。我也經歷了C編程,如果我錯過了這樣的事情,將會出現諸如「無效指針轉換」之類的錯誤 - 這不是一個好的編程習慣。

正確的做法是什麼?

附加信息:

我使用的是Joomla 1.7和我創建一個組成部分。我在工作XAMPP使用PHP 5.3.8

+3

現代PHP版本總是將對象作爲引用返回,所以'=&'不再是必需的,並且實際上會拋出警告消息。使用'=&'的代碼要麼被寫得很糟糕,要麼老舊,或者試圖在儘可能多的PHP版本上工作,因此無論如何定義都很糟糕。 –

+0

這只是讓我想起Joomla究竟有多可怕。 –

+0

可能重複[PHP框架支持遺留PHP4?](http://stackoverflow.com/questions/1714023/php-framework-support-for-legacy-php4) – mario

回答

1

這取決於:
- 的Joomla版本和PHP的版本,您使用
- 什麼返回JFactory :: getSession()方法

版本的Joomla 1.5與PHP 4和PHP 5兼容,版本1.6和1.7僅與PHP 5.

如果該方法返回的對象兼容,則&是在PHP 4強制性:默認對象傳遞/由返回值(發生該對象的副本)。 &避免了副本。
在PHP 5中,&沒用:對象總是被引用傳遞/返回(不發生複製)。

如果該方法返回其他任何內容,則不應使用&,但在一些非常罕見的情況下可能會有用(例如,爲了節省內存(例如,如果您有一個巨大的數組或字符串,並且您不在作業中需要複製它們)。

當方法簽名也包含&時,最好的做法是始終將&分配。

就你而言,我認爲你正在使用PHP 5和最新版本的Joomla,所以請不要使用&:這可能是Joomla源代碼中的一個過時代碼。

+0

我想聯機文檔已經過時了。我在實際的源代碼中看不到'&'。在這裏找到了文檔:http://api.joomla.org/Joomla-Framework/JFactory.html – Joseph