PicoraAutoLoader
Class wrapper around PHP's built in __autoload function.
The AutoLoader class is an object oriented hook into PHP's __autoload functionality.
- //single files
- PicoraAutoLoader::addFile('PageController','controllers/PageController.php');
- //multiple files
- PicoraAutoLoader::addFile(array('class'=>'file','class'=>'file'));
- //whole folders
- PicoraAutoLoader::addFolder('path');
//single files PicoraAutoLoader::addFile('PageController','controllers/PageController.php'); //multiple files PicoraAutoLoader::addFile(array('class'=>'file','class'=>'file')); //whole folders PicoraAutoLoader::addFolder('path');
When adding a whole folder each file should contain one class named the same as the file sans ".php" (PageController => PageController.php)
__autoload is defined in the Picora.php file.
Method Overview
Return | Visibility | Name | Parameters |
void | static public | addFolder | (mixed $folder) |
void | static public | addFile | (mixed $class_name, mixed $file) |
Method Detail
static public addFolder()
Parameter Type | Name | Description |
mixed | $folder | string, full path to a folder containing class files, or array of paths. |
- PicoraAutoLoader::addFolder('/path/to/my_classes/');
- PicoraAutoLoader::addFolder(array('/path/to/my_classes/','/more_classes/over/here/'));
PicoraAutoLoader::addFolder('/path/to/my_classes/'); PicoraAutoLoader::addFolder(array('/path/to/my_classes/','/more_classes/over/here/'));
static public addFile()
Parameter Type | Name | Description |
mixed | $class_name | string class name, or array of class name => file path pairs. |
mixed | $file | Full path to the file that contains $class_name. |
- PicoraAutoLoader::addFile('Controller','/path/to/Controller.php');
- PicoraAutoLoader::addFile(array('Controller'=>'/path/to/Controller.php','View'=>'/path/to/View.php'));
PicoraAutoLoader::addFile('Controller','/path/to/Controller.php'); PicoraAutoLoader::addFile(array('Controller'=>'/path/to/Controller.php','View'=>'/path/to/View.php'));
This class triggers the following events, which you can observe with the following syntax:
- PicoraEvent::observe('event_name','my_function'); //or
- PicoraEvent::observe('event_name',array($my_object,'my_instance_method')); //or
- PicoraEvent::observe('event_name',array('MyClass','my_static_method'));
PicoraEvent::observe('event_name','my_function'); //or PicoraEvent::observe('event_name',array($my_object,'my_instance_method')); //or PicoraEvent::observe('event_name',array('MyClass','my_static_method'));
Return | Name | Signature | Description |
bool | PicoraAutoLoader.load | (string class_name) | Callback must return true if a file was included or required. |
Declared in: PicoraAutoLoader.php
- final class PicoraAutoLoader {
- static protected $files = array();
- static protected $folders = array();
- /**
- * <pre class="highlighted"><code class="php">PicoraAutoLoader::addFile('Controller','/path/to/Controller.php');
- * PicoraAutoLoader::addFile(array('Controller'=>'/path/to/Controller.php','View'=>'/path/to/View.php'));</code></pre>
- * @param mixed $class_name string class name, or array of class name => file path pairs.
- * @param mixed $file Full path to the file that contains $class_name.
- * @return void
- */
- static public function addFile($class_name,$file = false){
- if(!$file && is_array($class_name))
- foreach($class_name as $key => $value)
- self::addFile($key,$value);
- else
- self::$files[$class_name] = $file;
- }
- /**
- * <pre class="highlighted"><code class="php">PicoraAutoLoader::addFolder('/path/to/my_classes/');
- * PicoraAutoLoader::addFolder(array('/path/to/my_classes/','/more_classes/over/here/'));</code></pre>
- * @param mixed $folder string, full path to a folder containing class files, or array of paths.
- * @return void
- */
- static public function addFolder($folder){
- if(is_array($folder))
- foreach($folder as $f)
- self::addFolder($f);
- else
- self::$folders[] = $folder;
- }
- static public function load($class_name){
- foreach(self::$files as $name => $file){
- if($class_name == $name){
- require_once($file);
- return true;
- }
- }
- foreach(self::$folders as $folder){
- if(substr(0,-1) != DIRECTORY_SEPARATOR)
- $folder .= DIRECTORY_SEPARATOR;
- if(file_exists($folder.$class_name.'.php')){
- require_once($folder.$class_name.'.php');
- return true;
- }
- }
- foreach(PicoraEvent::getObserverList('PicoraAutoLoader.load') as $callback)
- if(call_user_func($callback,$class_name) === true)
- return true;
- return false;
- }
- }
final class PicoraAutoLoader { static protected $files = array(); static protected $folders = array(); /** * <pre class="highlighted"><code class="php">PicoraAutoLoader::addFile('Controller','/path/to/Controller.php'); * PicoraAutoLoader::addFile(array('Controller'=>'/path/to/Controller.php','View'=>'/path/to/View.php'));</code></pre> * @param mixed $class_name string class name, or array of class name => file path pairs. * @param mixed $file Full path to the file that contains $class_name. * @return void */ static public function addFile($class_name,$file = false){ if(!$file && is_array($class_name)) foreach($class_name as $key => $value) self::addFile($key,$value); else self::$files[$class_name] = $file; } /** * <pre class="highlighted"><code class="php">PicoraAutoLoader::addFolder('/path/to/my_classes/'); * PicoraAutoLoader::addFolder(array('/path/to/my_classes/','/more_classes/over/here/'));</code></pre> * @param mixed $folder string, full path to a folder containing class files, or array of paths. * @return void */ static public function addFolder($folder){ if(is_array($folder)) foreach($folder as $f) self::addFolder($f); else self::$folders[] = $folder; } static public function load($class_name){ foreach(self::$files as $name => $file){ if($class_name == $name){ require_once($file); return true; } } foreach(self::$folders as $folder){ if(substr(0,-1) != DIRECTORY_SEPARATOR) $folder .= DIRECTORY_SEPARATOR; if(file_exists($folder.$class_name.'.php')){ require_once($folder.$class_name.'.php'); return true; } } foreach(PicoraEvent::getObserverList('PicoraAutoLoader.load') as $callback) if(call_user_func($callback,$class_name) === true) return true; return false; } }