CI 묻고 답하기

제목 $input->load->db 원리
카테고리 CI 2, 3
글쓴이 cloba 작성시각 2016/12/28 16:36:40
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 21137   RSS

안녕하세요.

php에 입문하여, CondeIgniter를 배우고 있는 3개월된 신입입니다.

CondeIgniter를 공부하면서 객체에 접근할 때는 ->를

배열에 접근할 때는 []을 사용했었는데요.

 

그러다 의문점이 생겼습니다. 흔히 사용하는

$this->load->model('a');

$this->db->insert() 등은

 

현재 class에서 load라는 객체 참조변수를 타고 a라는 이름을 가진 model을 실행시킨다.

현재 class에서 db라는 객체 참조변수를 통해 insert()이라는 메서드를 실행시키는 것이 맞나요?

그런데 db 나 load는 어디에 존재하나요? 

아래는 제가 ci_controller API(?)를 찾아봤는데 전혀 이런 내용은 없길래 너무 궁굼합니다.

 

30: class CI_Controller {
31: 
32:     private static $instance;
33: 
34:     /**
35:      * Constructor
36:      */
37:     public function __construct()
38:     {
39:         self::$instance =& $this;
40:         
41:         // Assign all the class objects that were instantiated by the
42:         // bootstrap file (CodeIgniter.php) to local class variables
43:         // so that CI can run as one big super object.
44:         foreach (is_loaded() as $var => $class)
45:         {
46:             $this->$var =& load_class($class);
47:         }
48: 
49:         $this->load =& load_class('Loader', 'core');
50: 
51:         $this->load->initialize();
52:         
53:         log_message('debug', "Controller Class Initialized");
54:     }
55: 
56:     public static function &get_instance()
57:     {
58:         return self::$instance;
59:     }
60: }

 

 

그리고 $this->load->helper('c'); <-- 이 경우는 c라는 helper를 객체로 만들어서 접근하는 것인가요?

ci의 기본원리에 대해 너무나 궁굼합니다. 

알려주세요!

 

 

 

 

 

 

 다음글 경로에 대해 질문드립니다. (2)
 이전글 CIBOARD의 사진 업로드 관련 문의 (1)

댓글

변종원(웅파) / 2016/12/28 17:14:39 / 추천 0

index.php부터 Codeigniter.php -> 기타 등등 파일을 따라 가보시면 ci의 작동구조를 알 수 있습니다.

load나 db는 ci core에서 제어합니다. 

클래스들인데 명시적으로 그렇게 사용하겠다라고 프레임워크 core에 정의를 한 것이죠.

load는 말 그대로 include_once or require_once 의 개념이라고 보시면 됩니다. core/Loader.php 한번 열어보세요.

kaido / 2016/12/28 17:20:54 / 추천 0

model 을 로드 선언 하면  CI_Controller 는 CI_Model 을 상속 받습니다.

내부 Model [사용자가 정의한 model 말고 CI 모델] 이 로드가 된거라서 객체 선언으로 사용이 가능합니다.

어딘가에서 불러오지 않고 객체 맴버를 호출 할 수는 없습니다 ㅎㅎ

아래 함수를 호출해서 확인해보세요. 생각보다 많은 클래스를 호출 하고 있음을 알게 될것입니다 ㅎㅎ

print_r(get_declared_classes());

 

한대승(불의회상) / 2016/12/28 17:35:48 / 추천 0

헬퍼와 라이브러리는 구조가 다릅니다.

헬퍼는 전역 사용자 정의 함수이고 라이브러리는 클래스죠.

$this->load->helper('c');

이 로드 명령어는 application/helper/c_helper.php 를 include 하라는 뜻입니다.

include APPPATH . 'helper/c_helper.php';

이 코드와 거의 동일하다고 생각하시면 됩니다.

정확한 로더의 구조는 웅파님 의견대로 CI_Loder를 분석해 보시는게 좋습니다.

cloba / 2016/12/29 08:52:31 / 추천 0

세 분 모두 많은 도움이 됐습니다. 

그냥 뭣모르고 사용하던

CI의 원리에 조금 알게 되서 너무나 기쁩니다.

감사합니다.