2.8 KiB
Loading Classes
Kohana takes advantage of PHP autoloading. This removes the need to call include or require before using a class. When you use a class Kohana will find and include the class file for you. For instance, when you want to use the [Cookie::set] method, you simply call:
Cookie::set('mycookie', 'any string value');
Or to load an [Encrypt] instance, just call [Encrypt::instance]:
$encrypt = Encrypt::instance();
Classes are loaded via the [Kohana::auto_load] method, which makes a simple conversion from class name to file name:
- Classes are placed in the
classes/
directory of the filesystem - Any underscore characters in the class name are converted to slashes
- The filename is lowercase
When calling a class that has not been loaded (eg: Session_Cookie
), Kohana will search the filesystem using [Kohana::find_file] for a file named classes/session/cookie.php
.
If your classes do not follow this convention, they cannot be autoloaded by Kohana. You will have to manually included your files, or add your own autoload function.
Custom Autoloaders
Kohana's default autoloader is enabled in application/bootstrap.php
using spl_autoload_register:
spl_autoload_register(array('Kohana', 'auto_load'));
This allows [Kohana::auto_load] to attempt to find and include any class that does not yet exist when the class is first used.
Example: Zend
You can easily gain access to other libraries if they include an autoloader. For example, here is how to enable Zend's autoloader so you can use Zend libraries in your Kohana application.
Download and install the Zend Framework files
- Download the latest Zend Framework files.
- Create a
vendor
directory atapplication/vendor
. This keeps third party software separate from your application classes. - Move the decompressed Zend folder containing Zend Framework to
application/vendor/Zend
.
Include Zend's Autoloader in your bootstrap
Somewhere in application/bootstrap.php
, copy the following code:
/**
* Enable Zend Framework autoloading
*/
if ($path = Kohana::find_file('vendor', 'Zend/Loader'))
{
ini_set('include_path',
ini_get('include_path').PATH_SEPARATOR.dirname(dirname($path)));
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
}
Usage example
You can now autoload any Zend Framework classes from inside your Kohana application.
if ($validate($_POST))
{
$mailer = new Zend_Mail;
$mailer->setBodyHtml($view)
->setFrom(Kohana::config('site')->email_from)
->addTo($email)
->setSubject($message)
->send();
}