Skip to content

Instantly share code, notes, and snippets.

@wenjun1055
Forked from jwage/SplClassLoader.php
Created December 19, 2013 07:28
Show Gist options
  • Select an option

  • Save wenjun1055/8035622 to your computer and use it in GitHub Desktop.

Select an option

Save wenjun1055/8035622 to your computer and use it in GitHub Desktop.

Revisions

  1. @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;
  2. @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)
    {
  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
    @@ -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)) {
  4. @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;
    }
  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)) ) {
    $namespace = '';
    if ($lastNsPos = strripos($className, $this->_namespaceSeparator)) {
    $namespace = substr($className, 0, $lastNsPos);
  6. @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);
  7. @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;
    }
  8. @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;
  9. @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;
    }

    /**
  10. @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
    {
  11. @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;
  12. @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;
    }
    }
    }
  13. @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;
  14. @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;
  15. @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;
    }

    /**
  16. @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;
    }
    }
  17. @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;
    }
  18. @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';
  19. @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;
    }
    }