123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?php
- /**
- *
- * Cube Framework $Id$ QSBif5jV3jDYkGZIgmOH1DJBH/FYrfa6x0gbADiBLmM=
- *
- * @link http://codecu.be/framework
- * @copyright Copyright (c) 2017 CodeCube SRL
- * @license http://codecu.be/framework/license Commercial License
- *
- * @version 1.9 [rev.1.9.01]
- */
- /**
- * autoloader class
- */
- namespace Cube\Loader;
- class Autoloader
- {
- /**
- *
- * location of the framework and application libraries
- */
- const LIBRARIES_PATH = 'library';
- /**
- *
- * we will allow mods to override classes
- */
- const MODS_PATH = 'mods';
- /**
- *
- * holds the array of autoloader paths
- *
- * @var array
- */
- private $_paths = array();
- /**
- *
- * the extension for the files to be autoloaded
- *
- * @var string
- */
- private $_fileExtension = '.php';
- /**
- *
- * mods path variable
- *
- * @var string
- */
- private $_modsPath = self::MODS_PATH;
- /**
- *
- * holds an instance of the object
- *
- * @var \Cube\Loader\Autoloader
- */
- private static $_instance;
- /**
- * class constructor
- *
- * set the folder path for the default library
- */
- protected function __construct()
- {
- $this->addPaths(array(
- self::LIBRARIES_PATH,
- ));
- }
- /**
- *
- * returns an instance of the object and creates it if it wasnt instantiated yet
- *
- * @return \Cube\Loader\Autoloader
- */
- public static function getInstance()
- {
- if (!self::$_instance instanceof self) {
- self::$_instance = new self();
- }
- return self::$_instance;
- }
- /**
- *
- * get mods path variable
- *
- * @return string
- */
- public function getModsPath()
- {
- return $this->_modsPath;
- }
- /**
- *
- * set a custom mods path variable
- *
- * @param string $modsPath
- *
- * @return $this
- */
- public function setModsPath($modsPath)
- {
- $this->_modsPath = $modsPath;
- return $this;
- }
- /**
- *
- * get autoloader paths
- *
- * @return array
- */
- public function getPaths()
- {
- return $this->_paths;
- }
- /**
- *
- * add multiple autoloader paths
- *
- * @param array $paths
- *
- * @return $this
- */
- public function addPaths($paths = array())
- {
- if (empty($this->_paths)) {
- $this->_paths = (array)$paths;
- }
- else if (!empty($paths)) {
- foreach ($paths as $path) {
- $this->addPath($path);
- }
- }
- return $this;
- }
- /**
- *
- * add single autoloader path
- *
- * @param string $path
- *
- * @return $this
- */
- public function addPath($path)
- {
- if (!in_array($path, $this->_paths)) {
- array_push($this->_paths, $path);
- }
- return $this;
- }
- /**
- *
- * the method will parse the data from the 'modules' key in the configuration array, and auto load all classes from the
- * folders defined, plus the classes from the include path (in the include path we have included the
- * folder where the framework is located
- *
- * @return $this
- */
- public function register()
- {
- spl_autoload_register(array($this, 'load'));
- return $this;
- }
- /**
- *
- * autoloader method
- *
- * @param string $class
- */
- public function load($class)
- {
- $pathInfo = pathinfo(
- str_replace('\\', DIRECTORY_SEPARATOR, $class));
- $included = false;
- foreach ((array)$this->_paths as $path) {
- if ($included === false) {
- $classFile = __DIR__ . '/../../../'
- . $path . DIRECTORY_SEPARATOR
- . $pathInfo['dirname'] . DIRECTORY_SEPARATOR
- . $pathInfo['filename'] . $this->_fileExtension;
- $extendedClassFile = __DIR__ . '/../../../'
- . $this->getModsPath() . DIRECTORY_SEPARATOR
- . $path . DIRECTORY_SEPARATOR
- . $pathInfo['dirname'] . DIRECTORY_SEPARATOR
- . $pathInfo['filename'] . $this->_fileExtension;
- if (file_exists($extendedClassFile)) {
- require_once $extendedClassFile;
- $included = true;
- }
- else if (file_exists($classFile)) {
- require_once $classFile;
- $included = true;
- }
- }
- }
- }
- }
|