Autoregister model / library / helper
For each name, the current logic checks the type. That's ugly.
It's better to rewrite this without a switch,
which turns out to be shorter too:

private function auto_register() {
    global $autoload;

    foreach ($autoload['libraries'] as $name) {
        $this-&gt;{$name . '_library'} = call_user_func_array(array($this-&gt;load, "library"), array($name));
    }
    foreach ($autoload['models'] as $name) {
        $this-&gt;{$name . '_model'} = call_user_func_array(array($this-&gt;load, "model"), array($name));
    }
    foreach ($autoload['helpers'] as $name) {
        call_user_func_array(array($this-&gt;load, "helper"), array($name));
   }
}