<?php
/**
* クラスローダのフロントエンド
*
* PHP version 5
*
* @package    core
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/
require_once( 'FrameworkClassLoader.class.php' );

class ClassLoader
{
	var $_loaders;

	/*
	 *    コンストラクタ
	 */
	private function __construct()
	{
		$this->_loaders = array();
	}

	/*
	 *    唯一のインスタンス取得
	 */
	public static function &getInstance()
	{
		static $singleton_;
		if ( $singleton_ == null ){
			$singleton_ = new ClassLoader();
		}
		return $singleton_;
	}

	/*
	 * クラスローダを追加
	 */
	public static function addClassLoader( IClassLoader $loader )
	{
		// インスタンスの取得
		$ins = & self::getInstance();

		$ins->_loaders[] = $loader;
	}

	/*
	 * クラスをロード
	 */
	public static function loadClass( $class_name )
	{
		// フレームワーククラスローダからロード
		if ( FrameworkClassLoader::loadClass( $class_name ) ){
			return TRUE;
		}

		// インスタンスの取得
		$ins = & self::getInstance();

		// クラスローダを順番に呼び出す
		foreach( $ins->_loaders as $loader ){
			if ( $loader->loadClass($class_name) ){
				return TRUE;
			}
		}

		return FALSE;
	}
}