<?php
/*
* PHP AutoLoad v1.0
* https://sourceforge.net/projects/php-autoload
*
* Copyright (c) 2012 James Watts (SOLFENIX)
* http://www.solfenix.com
*
* This is FREE software, licensed under the GPL
* http://www.gnu.org/licenses/gpl.html
*/
/*
* @package Solfenix
* @subpackage AutoLoad
* @author James Watts <contact@jameswatts.info>
* @copyright 2012 James Watts (SOLFENIX)
* @license http://www.gnu.org/licenses/gpl.html
* @link http://www.solfenix.com
* @version 1.0
*/
namespace Solfenix\AutoLoad;
/* AutoLoad
*
* Class to provide autoloading funcionality
*
* @author James Watts
* @version 1.0
*/
abstract class AutoLoad {
/*
* Array of directory names as path to classes
*/
protected static $path = array();
/*
* The default filename extension
*/
protected static $extension = 'php';
/* setPath
*
* Sets the root path for the class files
*
* @param Array $path The path as an array of directories
*/
public static function setPath( $path )
{
static::$path = (string) $path;
}
/* setExtension
*
* Sets the extension for the class filenames
*
* @param String $extension The extension to use
*/
public static function setExtension( $extension )
{
static:$extension = (string) $extension;
}
/* run
*
* Resolves a file by class name and optional namespace
*
* @param String $class The class name
* @return String
*/
public static function run( $class )
{
require_once static::resolveFile( $class );
}
/* resolveFile
*
* Resolves the file path for the class
*
* @param String $class The class name
* @return String
*/
public static function resolveFile( $class )
{
$class = ltrim( $class, '\\' );
return static::resolvePath() . static::resolveNamespace( $class ) . static::resolveClass( $class );
}
/* resolvePath
*
* Resolves the root path for the file
*
* @return String
*/
public static function resolvePath()
{
return ( count( static::$path ) > 0 ) ? implode( DIRECTORY_SEPARATOR, static::$path ) : '';
}
/* resolveNamespace
*
* Resolves the directory structure for the namespace
*
* @param String $class The class name
* @return String
*/
public static function resolveNamespace( $class )
{
if ( $last = strripos( $class, '\\' ) ) return str_replace( '\\', DIRECTORY_SEPARATOR, substr( $class, 0, $last ) ) . DIRECTORY_SEPARATOR;
return '';
}
/* resolveClass
*
* Resolves the filename for the class
*
* @param String $class The class name
* @return String
*/
public static function resolveClass( $class )
{
if ( $last = strripos( $class, '\\' ) ) $class = substr( $class, $last+1 );
return str_replace( '_', DIRECTORY_SEPARATOR, $class ) . '.' . static::$extension;
}
}