부가 클래스 생성하기

어떤 경우에는, 여러분은 컨트롤러에서는 떨어져있지만, CodeIgniter 의 모든 리소스를 활용할 수 있는 클래스를 개발하고 싶을 것입니다. 이것은 여러분이 보게될 것처럼 쉽게 가능합니다.

get_instance()

get_instance()
반환값:Reference to your controller’s instance
반환형:CI_Controller

컨트롤러 메소드 안에 인스턴스화한 어떤 클래스에서든 CodeIgniter 의 기본 리소스를 접근할 수 있습니다. get_instance() 함수를 사용하면 됩니다. 이 함수는 메인 CodeIgniter 객체를 반환합니다.

일반적으로, 사용 가능한 CodeIgniter 의 함수를 호출하기 위해, $this 생성자를 사용하는 것입니다:

$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
// etc.

$this 는 그러나 컨트롤러, 모델, 뷰 에서만 사용이 가능합니다. 만약에 CodeIgniter 의 클래스를 여러분이 정의한 클래스 내에서 사용하고 싶다면, 다음과 같이 할 수 있습니다:

우선, CodeIgniter 객체를 변수에 할당합니다:

$CI =& get_instance();

객체를 변수에 할당하고 나면, 그 변수를 $this 대신 사용할 수 있습니다:

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
// etc.

다른 클래스 안에서 get_instance() 를 사용하면, 속성에 할당하는 경우 더 나은 경우입니다. 이 방법은, get_instance() 를 각각의 함수에서 호출할 필요가 없게 됩니다.

예제:

class Example {

        protected $CI;

        // We'll use a constructor, as you can't directly call a function
        // from a property definition.
        public function __construct()
        {
                // Assign the CodeIgniter super-object
                $this->CI =& get_instance();
        }

        public function foo()
        {
                $this->CI->load->helper('url');
                redirect();
        }

        public function bar()
        {
                $this->CI->config->item('base_url');
        }
}

위 예제에서, foo() 함수와 bar() 함수는 모두 get_instance() 를 호출할 필요 없이 Example 클래스를 인스턴스화 한 후에 작동할 것입니다.