Обсуждались ли вы четкие определения местоположений вашего класса? Иногда имеет смысл группировать связанные классы.
Вот проверенный способ обращения с ним.
Этот код помещается в 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
строк в модуле, который будет определять все его классы во время выполнения.
Я рекомендую вам также взглянуть на стандарты кодирования Pear/Zend для соглашений об именах файлов, как обеспечить хорошие рекомендации. IMHO, использование .class.php в имени файла является избыточным и не рекомендуется. Вы можете автозагрузить, используя что-то вроде: require (str_replace ('_', DIRECTORY_SEPARATOR, $ className), чтобы упростить и упорядочить. – Tres
BTW, имеющий несколько классов на файл, обычно не считается хорошей практикой для удобства обслуживания кода. – Tres
Ха-ха, извините обо всех комментариях, но fyi, моя строка «require» выше - это не правильный синтаксис. Это должно быть: require (str_replace ('_', DIRECTORY_SEPARATOR, $ className). '.php'); Должен иметь модуль, который проверял мой комментарий;) – Tres