CI 묻고 답하기

제목 get_instance() 사용에 설명서 읽어보던 도중 궁금증이 발생했습니다.
글쓴이 오징어 작성시각 2011/01/22 12:51:55
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 23876   RSS
Note: 위에 사용된 get_instance() 는 객체를 참조로 넘겨줍니다.(& 를 주목할것):

$CI =& get_instance();

이것은 매우 중요합니다. 참조로 넘겨준다는것은 복사본이 아니라 원본의CodeIgniter 객체를 사용한다는것을 의미합니다.

또한 주의하세요: PHP 4 를 사용하신다면 생성자에서 get_instance() 함수를 호출하지마세요 . PHP 4 에서는 CodeIgniter 의 부모객체(super object)를 생성자에서 사용할때 문제가 발생합니다. 왜냐하면 클래스가 완전한 인스턴스가 되기전에는 CodeIgniter 객체가 존재할수 없기 때문입니다.(즉 PHP4 에서는 클래스의 생성자함수 실행이 완료된후에서야 객체가 존재하고 객체가 있어야 다른 객체를 생성할수 있기때문) 

위는 한글 CI 설명서에 나와 있는 부분인데요,

PHP4에서는

class test{

    var $CI;

    function
test()
    {
        $this->CI =& get_instance();
    }
}

이렇게 사용하면 안된다는 말인가요???
이해하기 어려운 말인거 같아요...

 다음글 ajax로 페이지를 업데이트하는데 (5)
 이전글 트위터 연동 여쭈어봅니다 (2)

댓글

변종원(웅파) / 2011/01/22 15:56:25 / 추천 0
 네. 맞습니다. ^^
오징어 / 2011/01/23 17:41:08 / 추천 0
기본 라이러브리들 보면
$this->CI =& get_config();
이런식으로 사용된 경우들이 몇개 있던데.....

CI_Config, CI_Cart, CI_Calendar, CI_Validation, CI_Session, CI_Parser, CI_Log 등등 기본 라이러브리를 보면 생성자에 $this->CI =& get_config(); 라는라인이 있는데요...

왜 만드는 라이러브리에서는 사용하게 하지 못하는지 이유좀 물어봐도 될까요 ㅠㅠ?
제가 보기에는 정상 작동하는 것 같아서 문의 드려요^^;;

만약에 이 방법이 안된다면, 어떤식으로 사용들하고 계신지요....?
jois / 2011/01/24 10:15:45 / 추천 0
유저가 만든 라이브러리에도 같은 방식으로 사용 가능합니다.
아마도 호출시점이 컨트롤러가 생성되기 전인 것 같네요.
컨트롤러가 생성된 후에 get_instance()를 사용할 수 있습니다.

호출시점 확인해보세요~