허들링이란? 추운 남극지방에서 부모는 사냥을 떠난 상황 혹은 혹독한 추위속에 펭귄들끼리 추위를 이겨내기 위해 옹기종기 모여 앉는 동작을 뜻합니다.

1_pOIwqJAWHi6jNHDDVSaItA.jpg

 

이제 펭귄들에게 허들링을 그만하게 해야할 때가 온 것 같습니다.

 

무슨말이냐면 다음을 보세요.

 

$oDB = &DB::getInstance();

 

이 코드는 파일 모듈의 클래스 파일에 있는 코드입니다.

 

옛날에는 참조하는 항목이 있다면 항상 변수에 선언하기전 &을 붙여서 사용하곤 했습니다.

 

하지만 이는 옛날 PHP5 버전대부터 사용을 안하는 방향으로 갔습니다.

 

아직도 최근생기는 모듈들을 살펴보다보면 가끔 다음과 같은 코드들이 있습니다.

 

$oModuleModel = &getModel('module');

 

이는 XE 1.7버전으로 옮겨갈때 XE코어팀에서도 대대적으로 제거하기 시작했던 코드들입니다 ㅎㅎ

 

다음과 같이 메소드에 return 시켜야 할 변수가 아닌경우라면 (ex 트리거)

public function triggerModule(&$obj)

 

이제 더 이상 펑션에도 펭귄을 쓸일이 없어졌네요 테스트해보니 ㅎㅎ

image.png

 

화면 캡처 2020-11-11 222105.png

 

이제는 펭귄이 허들링을 그만하도록 해야하지 않을까요

 

옛날이야 PHP버전의 발전이 지금과 같지 않아 추웟겠지만 지금은 많은 개발자의 영향으로 고기압전선이 내려오며 남서풍의 영향으로 따듯해졌으니 그만 보내줍시다 ㅎㅎㅎ

 

KakaoTalk_20200519_173101893_08.jpg

 

그 동안 고마웠어 펭귄아 :)

글쓴이 람보

profile
람보입니다.
  • profile
    펭귄 너무 귀여워요.
  • profile

    펭귄 ㅋㅋㅋㅋ

     

    좀더 정확하게 말씀드리자면

    1. 참조를 의미하는 &는 함수를 선언할 때만 사용할 수 있습니다.

    2. 함수를 선언할 때 &를 사용했다면, 그 함수를 호출할 때는 &를 사용하지 않아도 자동으로 참조로 전달됩니다.

    3. 함수를 호출할 때 &를 사용하면 경고가 뜹니다. ← 중요!!!

    4. 오브젝트는 항상 참조로 전달되므로 &가 필요없습니다. ← 중요!!!

    5. 위의 내용을 종합하면 RXE 서드파티 자료에서 &를 사용해야 하는 상황은 사실상 없습니다.

        - 예외: display 트리거에서 페이지 내용을 문자열로 주고받는 경우

     

    &DB::getInstance()

    &getModel('module')

    &getController('document')

    등등... 모두 20년 전 PHP 4.x에서나 통하던 문법인데

    아직도 습관적으로 쓰시는 분들이 많더군요.

     

  • profile profile
    보고 테스트해보니까 4번 항목에서 정말 그렇네요 ㅎㅎㅎ

    급하게 수정 ㅇ_ㅇㅋㅋㅋㅋㅋㅋ
  • profile
    저도 원래는 모르고 있던 사실인데, PHPStorm으로 IDE 바꾸니까 저런식으로 쓰면 안된다고 하더라고요

    뭔가 알고 있는 지식이랑 맞지 않는거 같아서 &을 빼놓고 쓰기는 했었는데, 옛날에 짜두었던 코드에서 저런식으로 쓴게 많더라고요..

    역시 이상한게 맞았네요 ㅎㅎ
  • profile profile
    PHP사용하시는 버전을 사용하시는 서버와 맞춰두면 해당 PHP버전에서 사용하는 기준으로 문법이 틀린거나 이런것들을 상세하게 잘 알려줍니다.
  • ?
    글읽고 궁금한점이 있습니다
    function &get_instance()
    {
    return CI_Controller::get_instance();
    }
    &를 붙이면 레퍼런스로 전달한다고 되어있는데
    객체면 &를 붙일필요가 없다는 뜻인가요?

    또한
    저기 $instance = get_instance();로
    get_instance()를 대입할때 &없어도 참조로 전달된다는 뜻이맞는거죠?
  • ? profile
    https://github.com/xpressengine/xe-core/commit/194ce8614a2e05bd23f6fc41b5a46b0d2e3e1671#diff-53d6e55476fb05f1a31b3d8f25cc1173f6712b26f9999efefb3553e5a2717b9f XE에는 진작에 지웠습니다..
  • profile ?
    감사합니다~