В моем include_path на стороне сервера у меня есть ссылка на каталог груши в «/usr/share/pear/». В свои приложения я включаю файлы из общей библиотеки, находящиеся в '/usr/share/pear/library/' с require_once 'library/file.php'
.
Недавно я начал использовать автозагрузчик spl, я заметил, что в функции загрузчика вы должны определить логику, с помощью которой нужно включить файл. Мой первый способ сделать это - попытаться включить файл и подавить его с помощью @
, чтобы посмотреть, не выйдет ли он из строя, например. @include 'library/file.php'
однако я думаю, что главным образом потому, что я много читал о том, что @
является плохой практикой, я решил вручную выполнить работу, взорвав get_include_path
с помощью PATH_SEPARATOR
и посмотрев, является ли каталог тем, что я хочу, затем выполнив file_exists
и включив его .
Вот так:
function classLoader( $class ) {
$paths = explode( PATH_SEPARATOR, get_include_path() );
$file = SITE_PATH . 'classes' . DS . $class . '.Class.php';
if ( file_exists( $file) == false )
{
$exists = false;
foreach ( $paths as $path )
{
$tmp = $path . DS . 'library' . DS . 'classes' . DS . $class . '.Class.php';
if ( file_exists ( $tmp ) )
{
$exists = true;
$file = $tmp;
}
}
if ( !$exists ) { return false; }
}
include $file;
}
spl_autoload_register('classLoader');
Я пошел неверным путем? Должен ли я был просто сделать @include
дело, или я делаю это в правильном направлении?