Рассматривали ли вы точные определения местоположений вашего класса? Иногда имеет смысл группировать связанные классы.
Вот проверенный способ обращения с ним.
Этот код помещается в auto_prepend_file
(или включается первым)
class Import
{
public static $_AutoLoad = array();
public static $_Imported = array();
public static function Load($sName)
{
if(! isset(self::$_AutoLoad[$sName]))
throw new ImportError("Cannot import module with name '$sName'.");
if(! isset(self::$_Imported[$sName]))
{
self::$_Imported[$sName] = True;
require(self::$_AutoLoad[$sName]);
}
}
public static function Push($sName, $sPath)
{
self::$_AutoLoad[$sName] = $sPath;
}
public static function Auto()
{
function __autoload($sClass)
{
Import::Load($sClass);
}
}
}
И в своем файле начальной загрузки определите ваши классы и в каком файле они находятся.
//Define autoload items
Import::Push('Admin_Layout', App::$Path . '/PHP/Admin_Layout.php');
Import::Push('Admin_Layout_Dialog', App::$Path . '/PHP/Admin_Layout.php');
Import::Push('FileClient', App::$Path . '/PHP/FileClient.php');
И наконец, включите автозагрузку, вызвав
Import::Auto()
<ч />
Одна из приятных вещей заключается в том, что вы можете определить «Модули»:
Import::Push('MyModule', App::$Path . '/Module/MyModule/Init.php');
А затем явно загружать их при необходимости:
Import::Load('MyModule');
И одна из лучших частей - вы можете иметь дополнительные Import::Push
строки в модуле, которые будут определять все его классы во время выполнения.