/SplClassLoader.php
https://bitbucket.org/fsilva/slick-framework · PHP · 167 lines · 62 code · 12 blank · 93 comment · 4 complexity · 2528f1ec7121bc29dc8973563e09886b MD5 · raw file
- <?php
- /**
- * SplClassLoader
- *
- * PHP version 5
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @package Slick
- * @subpackage Core
- * @author Filipe Silva <silvam.filipe@gmail.com>
- * @copyright Filipe Silva 2013
- * @license Apache License, Version 2.0 (the "License")
- * @since Version 1.0.0
- */
- /**
- * SplClassLoader implementation that implements the technical interoperability
- * standards for PHP 5.3 namespaces and class names.
- *
- * http://groups.google.com/group/php-standards/web/final-proposal
- *
- * // Example which loads classes for the Doctrine Common package in the
- * // Doctrine\Common namespace.
- * $classLoader = new SplClassLoader('Doctrine\Common', '/path/to/doctrine');
- * $classLoader->register();
- *
- * @package Slick
- * @subpackage Core
- * @author Jonathan H. Wage <jonwage@gmail.com>
- * @author Roman S. Borschel <roman@code-factory.org>
- * @author Matthew Weier O'Phinney <matthew@zend.com>
- * @author Kris Wallsmith <kris.wallsmith@gmail.com>
- * @author Fabien Potencier <fabien.potencier@symfony-project.org>
- */
- 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 = null, $includePath = null)
- {
- $this->_namespace = $ns;
- $this->_includePath = $includePath;
- }
-
- /**
- * 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;
- }
-
- /**
- * Gets the namespace seperator used by classes in the namespace of this class loader.
- *
- * @return void
- */
- public function getNamespaceSeparator()
- {
- return $this->_namespaceSeparator;
- }
-
- /**
- * Sets the base include path for all class files in the namespace of this class loader.
- *
- * @param string $includePath
- */
- public function setIncludePath($includePath)
- {
- $this->_includePath = $includePath;
- }
-
- /**
- * Gets the base include path for all class files in the namespace of this class loader.
- *
- * @return string $includePath
- */
- public function getIncludePath()
- {
- return $this->_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;
- }
-
- /**
- * Gets the file extension of class files in the namespace of this class loader.
- *
- * @return string $fileExtension
- */
- public function getFileExtension()
- {
- return $this->_fileExtension;
- }
-
- /**
- * Installs this class loader on the SPL autoload stack.
- */
- public function register()
- {
- spl_autoload_register(array($this, 'loadClass'));
- }
-
- /**
- * Uninstalls this class loader from the SPL autoloader stack.
- */
- public function unregister()
- {
- spl_autoload_unregister(array($this, 'loadClass'));
- }
-
- /**
- * Loads the given class or interface.
- *
- * @param string $className The name of the class to load.
- * @return void
- */
- public function loadClass($className)
- {
- // @codingStandardsIgnoreStart
- if (null === $this->_namespace || $this->_namespace.$this->_namespaceSeparator === substr($className, 0, strlen($this->_namespace.$this->_namespaceSeparator))) {
- $fileName = '';
- $namespace = '';
- if (false !== ($lastNsPos = strripos($className, $this->_namespaceSeparator))) {
- $namespace = substr($className, 0, $lastNsPos);
- $className = substr($className, $lastNsPos + 1);
- $fileName = str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
- }
- $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . $this->_fileExtension;
- $combined = ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '') . $fileName;
- if (is_file($combined)) {
- include($combined);
- }
- }
- // @codingStandardsIgnoreEnd
- }
- }