Skip to content

Instantly share code, notes, and snippets.

@abdullah353
Forked from jwage/SplClassLoader.php
Created August 19, 2014 06:39
Show Gist options
  • Save abdullah353/4333fd034652a911b67c to your computer and use it in GitHub Desktop.
Save abdullah353/4333fd034652a911b67c to your computer and use it in GitHub Desktop.

Revisions

  1. @jwage jwage revised this gist Mar 5, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -22,7 +22,7 @@
    * 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
    * http://groups.google.com/group/php-standards/web/psr-0-final-proposal?pli=1
    *
    * // Example which loads classes for the Doctrine Common package in the
    * // Doctrine\Common namespace.
  2. @jwage jwage revised this gist Mar 5, 2014. 1 changed file with 19 additions and 0 deletions.
    19 changes: 19 additions & 0 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,23 @@
    <?php

    /*
    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    *
    * This software consists of voluntary contributions made by many individuals
    * and is licensed under the MIT license. For more information, see
    * <http://www.doctrine-project.org>.
    */

    /**
    * SplClassLoader implementation that implements the technical interoperability
    * standards for PHP 5.3 namespaces and class names.
    @@ -11,6 +29,7 @@
    * $classLoader = new SplClassLoader('Doctrine\Common', '/path/to/doctrine');
    * $classLoader->register();
    *
    * @license http://www.opensource.org/licenses/mit-license.html MIT License
    * @author Jonathan H. Wage <[email protected]>
    * @author Roman S. Borschel <[email protected]>
    * @author Matthew Weier O'Phinney <[email protected]>
  3. @jwage jwage revised this gist Nov 11, 2009. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -123,7 +123,7 @@ public function loadClass($className)
    if (null === $this->_namespace || $this->_namespace.$this->_namespaceSeparator === substr($className, 0, strlen($this->_namespace.$this->_namespaceSeparator))) {
    $fileName = '';
    $namespace = '';
    if ($lastNsPos = strripos($className, $this->_namespaceSeparator)) {
    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;
  4. @jwage jwage revised this gist Nov 11, 2009. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -115,8 +115,8 @@ public function unregister()
    /**
    * 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.
    * @param string $className The name of the class to load.
    * @return void
    */
    public function loadClass($className)
    {
  5. @jwage jwage revised this gist Nov 11, 2009. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -120,7 +120,7 @@ public function unregister()
    */
    public function loadClass($className)
    {
    if (null === $this->_namespace || 0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    if (null === $this->_namespace || $this->_namespace.$this->_namespaceSeparator === substr($className, 0, strlen($this->_namespace.$this->_namespaceSeparator))) {
    $fileName = '';
    $namespace = '';
    if ($lastNsPos = strripos($className, $this->_namespaceSeparator)) {
  6. @jwage jwage revised this gist Nov 11, 2009. 1 changed file with 4 additions and 2 deletions.
    6 changes: 4 additions & 2 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -120,13 +120,15 @@ public function unregister()
    */
    public function loadClass($className)
    {
    if (null === $this->_namespace || $this->_namespace . $this->_namespaceSeparator === substr($className, 0, strlen($this->_namespace.$this->_namespaceSeparator)) ) {
    if (null === $this->_namespace || 0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    $fileName = '';
    $namespace = '';
    if ($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(array($this->_namespaceSeparator, '_'), DIRECTORY_SEPARATOR, $namespace . DIRECTORY_SEPARATOR . $className) . $this->_fileExtension;
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . $this->_fileExtension;

    require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '') . $fileName;
    }
  7. @jwage jwage revised this gist Nov 11, 2009. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -120,7 +120,7 @@ public function unregister()
    */
    public function loadClass($className)
    {
    if (null === $this->_namespace || 0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    if (null === $this->_namespace || $this->_namespace . $this->_namespaceSeparator === substr($className, 0, strlen($this->_namespace.$this->_namespaceSeparator)) ) {
    $namespace = '';
    if ($lastNsPos = strripos($className, $this->_namespaceSeparator)) {
    $namespace = substr($className, 0, $lastNsPos);
  8. @jwage jwage revised this gist Nov 11, 2009. 1 changed file with 0 additions and 1 deletion.
    1 change: 0 additions & 1 deletion SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -122,7 +122,6 @@ public function loadClass($className)
    {
    if (null === $this->_namespace || 0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    $namespace = '';
    $fileName = '';
    if ($lastNsPos = strripos($className, $this->_namespaceSeparator)) {
    $namespace = substr($className, 0, $lastNsPos);
    $className = substr($className, $lastNsPos + 1);
  9. @jwage jwage revised this gist Nov 11, 2009. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -126,9 +126,8 @@ public function loadClass($className)
    if ($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;
    $fileName = str_replace(array($this->_namespaceSeparator, '_'), DIRECTORY_SEPARATOR, $namespace . DIRECTORY_SEPARATOR . $className) . $this->_fileExtension;

    require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '') . $fileName;
    }
  10. @jwage jwage revised this gist Nov 11, 2009. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -123,8 +123,7 @@ public function loadClass($className)
    if (null === $this->_namespace || 0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    $namespace = '';
    $fileName = '';
    if (strstr($className, $this->_namespaceSeparator)) {
    $lastNsPos = strrpos($className, $this->_namespaceSeparator);
    if ($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;
  11. @jwage jwage revised this gist Nov 10, 2009. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -32,8 +32,8 @@ class SplClassLoader
    */
    public function __construct($ns = null, $includePath = null)
    {
    $this->_includePath = $includePath;
    $this->_namespace = $ns;
    $this->_includePath = $includePath;
    }

    /**
  12. @jwage jwage revised this gist Nov 10, 2009. 1 changed file with 8 additions and 0 deletions.
    8 changes: 8 additions & 0 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -4,10 +4,18 @@
    * 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();
    *
    * @author Jonathan H. Wage <[email protected]>
    * @author Roman S. Borschel <[email protected]>
    * @author Matthew Weier O'Phinney <[email protected]>
    * @author Kris Wallsmith <[email protected]>
    * @author Fabien Potencier <[email protected]>
    */
    class SplClassLoader
    {
  13. @jwage jwage revised this gist Nov 10, 2009. 1 changed file with 7 additions and 7 deletions.
    14 changes: 7 additions & 7 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -6,7 +6,7 @@
    *
    * // Example which loads classes for the Doctrine Common package in the
    * // Doctrine\Common namespace.
    * $classLoader = new SplClassLoader('Doctrine\Common');
    * $classLoader = new SplClassLoader('Doctrine\Common', '/path/to/doctrine');
    * $classLoader->register();
    */
    class SplClassLoader
    @@ -15,19 +15,19 @@ class SplClassLoader
    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($includePath = null, $ns = null)
    public function __construct($ns = null, $includePath = null)
    {
    $this->_includePath = $includePath;
    $this->_namespace = $ns;
    }

    /**
    * Sets the namespace separator used by classes in the namespace of this class loader.
    *
    @@ -116,9 +116,9 @@ public function loadClass($className)
    $namespace = '';
    $fileName = '';
    if (strstr($className, $this->_namespaceSeparator)) {
    $pos = strrpos($className, $this->_namespaceSeparator);
    $namespace = substr($className, 0, $pos);
    $className = substr($className, $pos + 1);
    $lastNsPos = strrpos($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;
  14. @jwage jwage revised this gist Nov 10, 2009. 1 changed file with 54 additions and 8 deletions.
    62 changes: 54 additions & 8 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -37,17 +37,37 @@ 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 $basePath
    * @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.
    *
    @@ -57,15 +77,33 @@ 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.
    *
    @@ -75,9 +113,17 @@ public function register()
    public function loadClass($className)
    {
    if (null === $this->_namespace || 0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '')
    . str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $className)
    . $this->_fileExtension;
    $namespace = '';
    $fileName = '';
    if (strstr($className, $this->_namespaceSeparator)) {
    $pos = strrpos($className, $this->_namespaceSeparator);
    $namespace = substr($className, 0, $pos);
    $className = substr($className, $pos + 1);
    $fileName = str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . $this->_fileExtension;

    require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '') . $fileName;
    }
    }
    }
  15. @jwage jwage revised this gist Nov 10, 2009. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -74,7 +74,7 @@ public function register()
    */
    public function loadClass($className)
    {
    if ($this->_namespace === null || 0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    if (null === $this->_namespace || 0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '')
    . str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $className)
    . $this->_fileExtension;
  16. @jwage jwage revised this gist Nov 10, 2009. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -22,10 +22,10 @@ class SplClassLoader
    *
    * @param string $ns The namespace to use.
    */
    public function __construct($ns, $includePath = null)
    public function __construct($includePath = null, $ns = null)
    {
    $this->_namespace = $ns;
    $this->_includePath = $includePath;
    $this->_namespace = $ns;
    }

    /**
    @@ -74,7 +74,7 @@ public function register()
    */
    public function loadClass($className)
    {
    if (0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    if ($this->_namespace === null || 0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '')
    . str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $className)
    . $this->_fileExtension;
  17. @jwage jwage revised this gist Nov 3, 2009. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -22,9 +22,10 @@ class SplClassLoader
    *
    * @param string $ns The namespace to use.
    */
    public function __construct($ns)
    public function __construct($ns, $includePath = null)
    {
    $this->_namespace = $ns;
    $this->_includePath = $includePath;
    }

    /**
  18. @jwage jwage revised this gist Oct 30, 2009. 1 changed file with 4 additions and 8 deletions.
    12 changes: 4 additions & 8 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -73,14 +73,10 @@ public function register()
    */
    public function loadClass($className)
    {
    if (strpos($className, $this->_namespace.$this->_namespaceSeparator) !== 0) {
    return false;
    if (0 === strpos($className, $this->_namespace.$this->_namespaceSeparator)) {
    require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '')
    . str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $className)
    . $this->_fileExtension;
    }

    require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '')
    . str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $className)
    . $this->_fileExtension;

    return true;
    }
    }
  19. @jwage jwage revised this gist Oct 29, 2009. 1 changed file with 0 additions and 4 deletions.
    4 changes: 0 additions & 4 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -73,10 +73,6 @@ public function register()
    */
    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;
    }
  20. @invalid-email-address Anonymous revised this gist Oct 29, 2009. 1 changed file with 11 additions and 0 deletions.
    11 changes: 11 additions & 0 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,14 @@
    <?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';
  21. @invalid-email-address Anonymous created this gist Oct 29, 2009.
    79 changes: 79 additions & 0 deletions SplClassLoader.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,79 @@
    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;
    }
    }