File indexing completed on 2024-12-22 05:33:09
0001 <?php 0002 0003 /** 0004 * Flooer Framework 0005 * 0006 * LICENSE: BSD License (2 Clause) 0007 * 0008 * @category Flooer 0009 * @package Flooer_Autoload 0010 * @author Akira Ohgaki <akiraohgaki@gmail.com> 0011 * @copyright Akira Ohgaki 0012 * @license https://opensource.org/licenses/BSD-2-Clause BSD License (2 Clause) 0013 * @link https://github.com/akiraohgaki/flooer 0014 */ 0015 0016 /** 0017 * Usage 0018 * 0019 * $autoload = new Flooer_Autoload(); 0020 * $autoload->register(); 0021 * $autoload->setExtensions('.php,.inc'); 0022 */ 0023 0024 /** 0025 * Class autoloader class 0026 * 0027 * @category Flooer 0028 * @package Flooer_Autoload 0029 * @author Akira Ohgaki <akiraohgaki@gmail.com> 0030 */ 0031 class Flooer_Autoload 0032 { 0033 0034 /** 0035 * Configuration options 0036 * 0037 * @var array 0038 */ 0039 protected $_config = array( 0040 'register' => false, 0041 'extensions' => null 0042 ); 0043 0044 /** 0045 * Constructor 0046 * 0047 * @param array $config 0048 * @return void 0049 */ 0050 public function __construct(array $config = null) 0051 { 0052 if ($config) { 0053 $this->_config = $config + $this->_config; 0054 } 0055 if ($this->_config['register']) { 0056 $this->register(); 0057 } 0058 if ($this->_config['extensions']) { 0059 $this->setExtensions($this->_config['extensions']); 0060 } 0061 } 0062 0063 /** 0064 * Autoload a class 0065 * 0066 * @param string $class 0067 * @return void 0068 */ 0069 public function autoload($class) 0070 { 0071 $extensions = explode( 0072 ',', 0073 str_replace(' ', '', spl_autoload_extensions()) 0074 ); 0075 $directories = explode( 0076 PATH_SEPARATOR, 0077 get_include_path() 0078 ); 0079 $pearStyleFile = null; 0080 if (strpos($class, '_')) { 0081 $pearStyleFile = str_replace('_', '/', $class); 0082 } 0083 $lowerCaseFile = strtolower($class); 0084 foreach ($extensions as $extension) { 0085 foreach ($directories as $directory) { 0086 if ($pearStyleFile 0087 && is_file($directory . '/' . $pearStyleFile . $extension) 0088 ) { 0089 include_once $directory . '/' . $pearStyleFile . $extension; 0090 break 2; 0091 } 0092 if (is_file($directory . '/' . $lowerCaseFile . $extension)) { 0093 include_once $directory . '/' . $lowerCaseFile . $extension; 0094 break 2; 0095 } 0096 if (is_file($directory . '/' . $class . $extension)) { 0097 include_once $directory . '/' . $class . $extension; 0098 break 2; 0099 } 0100 } 0101 } 0102 } 0103 0104 /** 0105 * Register the autoload function 0106 * 0107 * @return bool 0108 */ 0109 public function register() 0110 { 0111 return spl_autoload_register(array($this, 'autoload')); 0112 } 0113 0114 /** 0115 * Unregister the autoload function 0116 * 0117 * @return bool 0118 */ 0119 public function unregister() 0120 { 0121 return spl_autoload_unregister(array($this, 'autoload')); 0122 } 0123 0124 /** 0125 * Get a registered functions 0126 * 0127 * @return array|false 0128 */ 0129 public function getFunctions() 0130 { 0131 return spl_autoload_functions(); 0132 } 0133 0134 /** 0135 * Set a file extensions 0136 * 0137 * @param string $extensions Comma-separated list 0138 * @return void 0139 */ 0140 public function setExtensions($extensions) 0141 { 0142 spl_autoload_extensions($extensions); 0143 } 0144 0145 /** 0146 * Get a file extensions 0147 * 0148 * @return string 0149 */ 0150 public function getExtensions() 0151 { 0152 return spl_autoload_extensions(); 0153 } 0154 0155 }