-
-
Save wenjun1055/8035622 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * SplClassLoader implementation that implements the technical interoperability | |
| * standards for PHP 5.3 namespaces and class names. | |
| * | |
| * // Example which loads classes for the Doctrine Common package in the | |
| * // Doctrine\Common namespace. | |
| * $classLoader = new SplClassLoader('Doctrine\Common'); | |
| * $classLoader->register(); | |
| */ | |
| class SplClassLoader | |
| { | |
| private $_fileExtension = '.php'; | |
| private $_namespace; | |
| private $_includePath; | |
| private $_namespaceSeparator = '\\'; | |
| /** | |
| * Creates a new <tt>SplClassLoader</tt> that loads classes of the | |
| * specified namespace. | |
| * | |
| * @param string $ns The namespace to use. | |
| */ | |
| public function __construct($ns) | |
| { | |
| $this->_namespace = $ns; | |
| } | |
| /** | |
| * Sets the namespace separator used by classes in the namespace of this class loader. | |
| * | |
| * @param string $sep The separator to use. | |
| */ | |
| public function setNamespaceSeparator($sep) | |
| { | |
| $this->_namespaceSeparator = $sep; | |
| } | |
| /** | |
| * Sets the base include path for all class files in the namespace of this class loader. | |
| * | |
| * @param string $basePath | |
| */ | |
| public function setIncludePath($includePath) | |
| { | |
| $this->_includePath = $includePath; | |
| } | |
| /** | |
| * Sets the file extension of class files in the namespace of this class loader. | |
| * | |
| * @param string $fileExtension | |
| */ | |
| public function setFileExtension($fileExtension) | |
| { | |
| $this->_fileExtension = $fileExtension; | |
| } | |
| /** | |
| * Installs this class loader on the SPL autoload stack. | |
| */ | |
| public function register() | |
| { | |
| spl_autoload_register(array($this, 'loadClass')); | |
| } | |
| /** | |
| * Loads the given class or interface. | |
| * | |
| * @param string $classname The name of the class to load. | |
| * @return boolean TRUE if the class has been successfully loaded, FALSE otherwise. | |
| */ | |
| public function loadClass($className) | |
| { | |
| if (class_exists($className, false) || interface_exists($className, false)) { | |
| return false; | |
| } | |
| if (strpos($className, $this->_namespace.$this->_namespaceSeparator) !== 0) { | |
| return false; | |
| } | |
| require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '') | |
| . str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $className) | |
| . $this->_fileExtension; | |
| return true; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment