<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>

<title>Code Igniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../scripts/nav.js"></script>
<script type="text/javascript" src="../scripts/prototype.lite.js"></script>
<script type="text/javascript" src="../scripts/moo.fx.js"></script>
<script type="text/javascript">
window.onload = function() {
	myHeight = new fx.Height('nav', {duration: 400}); 
	myHeight.hide();
}
</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='Rick Ellis' />
<meta name='description' content='Code Igniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle.jpg" width="153" height="44" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>Code Igniter User Guide Version 1.5.0</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Full Table of Contents</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://www.codeigniter.com/">Code Igniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
Creating Libraries
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="www.codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">

<h1>Creating Libraries</h1>

<p>When we use the term "Libraries" we are normally referring to the classes that are located in the <kbd>libraries</kbd>
directory and described in the Class Reference of this user guide.  In this case, however, we will instead describe how you can create your own libraries within 
your <dfn>application</dfn> directory in order to maintain separation between your local resources and the global framework resources.</p>

<h2>Storage</h2>

<p>Your library classes should be placed within your <dfn>application/libraries</dfn> folder, as this is where Code Igniter will look for them when 
they are initialized. If your class is named identically to a native class from the <dfn>system/libraries</dfn> folder, your version
will be used instead.</p>


<h2>Naming Conventions</h2>

<ul>
<li>File names must be capitalized. For example:&nbsp; <dfn>Myclass.php</dfn></li>
<li>Class declarations must be capitalized. For example:&nbsp;  <kbd>class Myclass</kbd></li>
<li>Class names and file names must match.</li>
</ul>


<h2>The Class File</h2>

<p>Classes should have this basic prototype (Note:  We are using the name <kbd>Myclass</kbd> purely as an example):</p>

<code>&lt;?php  if (!defined('BASEPATH')) exit('No direct script access allowed');<br />
<br />
// Initialize the class<br />
$obj =& get_instance();<br />
$obj->init_class('Myclass');
<br /><br />
class Myclass {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;function some_function()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br /><br />
?&gt;</code>


<p>You'll notice in the above example that the class is instantiated directly from the file itself using these two lines of code:</p>

<code>$obj =& get_instance();<br />
$obj->init_class(<kbd>'Myclass'</kbd>);</code>

<p class="important">Make sure and submit your class name in the first parameter of the <kbd>$obj->init_class()</kbd> function. In the
above example it is <kbd>Myclass</kbd></p>


<h2>Using Your Class</h2>

<p>From within any of your <a href="controllers.html">Controller</a> functions you can initialize your class using the standard:</p>

<code>$this->load->library('<kbd>Mclass</kbd>');</code>

<p>Where <em>Myclass</em> is the file name, without the ".php" file extension. You can submit the file name capitalized or lower case. 
Code Igniter doesn't care.</p>

<p>Once loaded you can access your class using:</p>

<code>$this-><kbd>myclass</kbd>->some_function();&nbsp; // Object instances will always be lower case
</code>

<h2>Setting a Different Class Variable Name</h2>


<p>If you would like the object variable ($this->myclass) set to a different name you can specify it when initializing your class.  For
example, let's initialize it as <kbd>foobar</kbd>:</p>

<code>$obj =& get_instance();<br />
$obj->init_class('Myclass', <kbd>'foobar'</kbd>);</code>

<p>In the above example you would still load your class like this:</p>

<code>$this->load->library('<kbd>Mclass</kbd>');</code>

<p>But you would use it like this:<p>

<code>$this-><kbd>foobar</kbd>->function();</code>


<h2>Passing Parameters When Initializing Your Class</h2>

<p>In the library loading function you can dynamically pass data via the second parameter and it will be passed to your class 
constructor:</p>

<code>
$params = array('type' => 'large', 'color' => 'red');<br />
<br />
$this->load->library('Myclass', <kbd>$params</kbd>);</code>

<p>If you use this feature you must set up your class constructor to expect data:</p>

<code>&lt;?php  if (!defined('BASEPATH')) exit('No direct script access allowed');<br />
<br />
// Initialize the class<br />
$obj =& get_instance();<br />
$obj->init_class('Myclass');
<br /><br />
class Myclass {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;function Myclass($params)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Do something with $params<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br /><br />
?&gt;</code>

<p>You can also pass parameters via the third parameter of the <dfn>$obj->init_class()</dfn> function:</p>

<code>&lt;?php  if (!defined('BASEPATH')) exit('No direct script access allowed');<br />
<br />

$params = array('type' => 'large', 'color' => 'red');<br /><br />

// Initialize the class<br />
$obj =& get_instance();<br />
$obj->init_class('Myclass', 'myclass', $params);
<br /><br />
class Myclass {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;function Myclass($params)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Do something with $params<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br /><br />
?&gt;</code>







<h2>Utilizing Code Igniter Resources within Your Library</h2>


<p>To access Code Igniter's native resources within your library use the <kbd>get_instance()</kbd> function.
This function returns the Code Igniter super object.</p>

<p>Normally from within your controller functions you will call any of the available Code Igniter functions using the <kbd>$this</kbd> construct:</p>

<code>
<strong>$this</strong>->load->helper('url');<br />
<strong>$this</strong>->load->library('session');<br />
<strong>$this</strong>->config->item('base_url');<br />
etc.
</code>

<p><kbd>$this</kbd>, however, only works directly within your controllers, your models, or your views.  
If you would like to use Code Igniter's classes from within your own custom classes you can do so as follows:</p>


<p>First, assign the Code Igniter object to a variable:</p>

<code>$obj =& get_instance();</code>

<p>Once you've assigned the object to a variable, you'll use that variable <em>instead</em> of <kbd>$this</kbd>:</p>

<code>
$obj =& get_instance();<br /><br />
$obj->load->helper('url');<br />
$obj->load->library('session');<br />
$obj->config->item('base_url');<br />
etc.
</code>

<p class="important"><strong>Note:</strong> You'll notice that the above get_instance() function is being passed by reference:
<br /><br />
<var>$obj =& get_instance();</var>
<br /><br />
<kbd>This is very important.</kbd> Assigning by reference allows you to use the original Code Igniter object rather than creating a copy of it.</p>







</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="libraries.html">Using Code Igniter Libraries</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="core_classes.html">Creating Core System Classes</a>
<p>
<p><a href="http://www.codeigniter.com">Code Igniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 &nbsp;&middot;&nbsp; <a href="http://www.pmachine.com">pMachine, Inc.</a></p>
</div>

</body>
</html>