Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
8 / 8
CRAP
100.00% covered (success)
100.00%
23 / 23
Psr4
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
8 / 8
9
100.00% covered (success)
100.00%
23 / 23
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
4 / 4
 setBaseDir
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 getBaseDir
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 setFileExtension
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 getFileExtension
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 register
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 unregister
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 loadClass
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
7 / 7
<?php
namespace Puyo\Loader;
/**
 * PSR-4準拠のautoloader
 *
 * 1つの namespacePrefix - baseDir の対応とその登録/解除を行う
 */
class Psr4
{
    const NS_SEPARATOR = '\\';
    private $nsPrefix;
    private $baseDir;
    private $fileExt = '.php';
    /**
     * constructor
     *
     * @param string $nsPrefix (optional)
     * @param string $baseDir (optional)
     * @param string $fileExt (optional) default='.php'
     */
    public function __construct($nsPrefix=null, $baseDir=null, $fileExt='.php') {
        $this->nsPrefix = $nsPrefix;
        $this->setBaseDir($baseDir);
        $this->setFileExtension($fileExt);
    }
    /**
     * Sets the base include path for all class files in the namespace of this class loader.
     *
     * @param string $baseDir
     */
    public function setBaseDir($baseDir) {
        $this->baseDir = $baseDir;
    }
    /**
     * Gets the base include path for all class files in the namespace of this class loader.
     *
     * @return string $baseDir
     */
    public function getBaseDir() {
        return $this->baseDir;
    }
    /**
     * Sets the file extension of class files in the namespace of this class loader.
     *
     * @param string $fileExt
     */
    public function setFileExtension($fileExt) {
        $this->fileExt = $fileExt;
    }
    /**
     * Gets the file extension of class files in the namespace of this class loader.
     *
     * @return string $fileExtension
     */
    public function getFileExtension() {
        return $this->fileExt;
    }
    /**
     * 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) {
        
        $relativePath = substr($className, strlen($this->nsPrefix.self::NS_SEPARATOR));
        $relativePath = str_replace(self::NS_SEPARATOR, DIRECTORY_SEPARATOR, $relativePath);
        $relativePath .= $this->fileExt;
        $fullpath = $this->baseDir . DIRECTORY_SEPARATOR . $relativePath;
        if(is_file($fullpath)) {
            require $fullpath;
        }
    }
}