+ +
+

Creating Ancillary Classes

+

In some cases you may want to develop classes that exist apart from your +controllers but have the ability to utilize all of CodeIgniter’s +resources. This is easily possible as you’ll see.

+
+

get_instance()

+
+
+get_instance()
+
+++ + + + + + +
Returns:Reference to your controller’s instance
Return type:CI_Controller
+
+ +

Any class that you instantiate within your controller methods can +access CodeIgniter’s native resources simply by using the +get_instance() function. This function returns the main +CodeIgniter object.

+

Normally, to call any of the available methods, CodeIgniter requires +you to use the $this construct:

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

$this, however, only works within your controllers, your models, +or your views. If you would like to use CodeIgniter’s classes from +within your own custom classes you can do so as follows:

+

First, assign the CodeIgniter object to a variable:

+
$CI =& get_instance();
+
+
+

Once you’ve assigned the object to a variable, you’ll use that variable +instead of $this:

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

If you’ll be using get_instance() inside another class, then it would +be better if you assign it to a property. This way, you won’t need to call +get_instance() in every single method.

+

Example:

+
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');
+        }
+}
+
+
+

In the above example, both methods foo() and bar() will work +after you instantiate the Example class, without the need to call +get_instance() in each of them.

+
+
+ + +