Even better, put an __autoload() at the bottom of config.php (a weird place, but trust me its the best) and have it checking application/classes/ then check application/functions.
/*
| -------------------------------------------------------------------
| Native Auto-load
| -------------------------------------------------------------------
|
| Nothing to do with config/autoload.php, this allows PHP autoload to work
| for controller types and some third-party libraries.
|
*/
function __autoload($class)
{
if(strpos($class, 'CI_') !== 0)
{
$class = APPPATH . 'classes/'. $class . EXT;
$lib = APPPATH . 'libraries/'. $class . EXT;
if(file_exists($class))
{
include_once( $class );
}
else if(file_exists($lib))
{
include_once( $lib );
}
}
}
That way you dont need to worry how things are loaded. Use the core libraries as expected and use your classes without including them at all. You can even start moving your classes over to be libraries without needing to worry too much about naming conventions or the loader, and libs can be static, singleton, whatever using this method.