2011-12-13 5 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 사용하고 난 구성 요소를 만드는거야. 내가 PHP를 XAMPP 작업 5.3.8

+3

최신 PHP 버전은 항상 객체를 참조로 반환하므로 '= &'는 더 이상 필요하지 않으며 실제로 경고 메시지를 표시하지 않습니다. '= &'를 사용하는 코드는 잘못 작성되었거나, 구식이거나, 구식이거나, 가능한 한 많은 PHP 버전을 사용하려고 노력하고 있으므로, 어쨌든 잘못 작성되었습니다. –

+0

이것은 Joomla가 실제로 얼마나 끔찍한지를 상기시켜줍니다. –

+0

[PHP 프레임 워크에서 레거시 PHP4를 지원합니까?] (http://stackoverflow.com/questions/1714023/php-framework-support-for-legacy-php4) – mario

답변

1

이에 따라 달라집니다
이 - 줌라의 버전과 PHP의 버전이
사용 - 어떤이 JFactory :: 대해 getSession를 반환() 메소드

줌라 버전을 1.5는 PHP 4 및 PHP 5와 호환됩니다. 버전 1.6 및 1.7은 PHP 5에서만 호환됩니다.

메서드가 객체를 반환하면 &이 필수입니다. 기본적으로 객체는 값에 의해 전달되거나 반환됩니다. (개체의 복사본이 발생 함). &은 복사를 방지합니다.
PHP 5에서 &은 쓸모가 없습니다. 객체는 항상 참조로 전달되거나 반환됩니다 (복사가 발생하지 않음).

이 메서드가 다른 것을 반환하면 &을 사용하지 말고 매우 드문 경우에 유용 할 수 있습니다 (예 : 거대한 배열이나 문자열이있는 경우 메모리를 절약하기 위해 과제물에 복사본이 있어야 함).

메서드 서명에 &이 포함되어있는 경우 항상 &을 할당하는 것이 좋습니다.

귀하의 경우 PHP 5와 Joomla의 최신 버전을 사용하고 있으니 &을 사용하지 마십시오 : 이것은 아마도 Joomla 소스에서 사용되지 않는 코드 일 것입니다.

+0

온라인 문서가 더 이상 사용되지 않는다고 가정합니다. 나는 실제 소스에서'&'를 보지 못한다. http://api.joomla.org/Joomla-Framework/JFactory.html에서 문서를 찾았습니다. – Joseph

관련 문제