補助的なクラス作成

いくつかのケースでは、クラスをコントローラから切り離して作りつつも CodeIgniter のあらゆるリソースを利用したい場合があります。 それはつぎに示すように、簡単です。

get_instance()

get_instance()
返り値:コントローラのインスタンスへの参照
返り値の型:CI_Controller

コントローラのメソッド内でインスタンス化するクラスはすべて CodeIgniter のネイティブリソースにアクセスすることができます 、シンプルに get_instance() 関数を利用しましょう。この関数はメインの CodeIgniter オブジェクトを返します。

通常、 CodeIgniter の利用可能なメソッドを呼び出すには $this 構文を使用する必要があります:

$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
// など。

しかしながら $this はこれはコントローラ内、モデル内、 ビュー内で使用する場合にだけ動作します。独自のカスタムクラス内から CodeIgniter のクラスを使用したい場合は、以下のようにできます:

まず、変数に CodeIgniter のオブジェクトを割り当てます:

$CI =& get_instance();

オブジェクトを変数に割り当てたなら、 $thisかわりに その変数を使用します:

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
// など。

もし別のクラス内で get_instance() を使うなら、 プロパティに割り当てるのが良いでしょう。そうすればそれぞれのメソッドで get_instance() を呼び出す必要がなくなります。

例:

class Example {

        protected $CI;

        // プロパティ定義では関数を直接呼び出せませんので
        // コンストラクタを使います。
        public function __construct()
        {
                // CodeIgniter のスーパーオブジェクトを割り当てます
                $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() を呼び出すことなく動作します。