W mojej include_path po stronie serwera mam odniesienie do katalogu gruszki, w '/ usr/share/pear /'. Do moich aplikacji dołączam pliki ze wspólnej biblioteki, z "/ usr/share/pear/library /" z require_once 'library/file.php'
.SPL Autoloading best practices
Niedawno zacząłem używać autoloadera spl, zauważyłem w funkcji programu ładującego, aby określić logikę, z którą należy dołączyć plik. Moim pierwszym sposobem było to, aby dołączyć plik i wyłączyć go za pomocą @
, aby sprawdzić, czy nie zawiedzie, np. @include 'library/file.php'
jednak myślę, że głównie dlatego, że dużo czytałem o @
będąc złym treningiem postanowiłem ręcznie wykonać pracę samodzielnie eksplodując get_include_path
przez PATH_SEPARATOR
i sprawdzając, czy katalog jest tym, czym chcę, a następnie wykonując file_exists
i włączając go .
tak:
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');
Czy idę złą drogę? Czy powinienem zrobić interes w sprawie @include
, czy też robię to w pewnym sensie?
Czy spl autoloading nie jest bardziej praktyczną i nowoczesną metodą? Czy to w zasadzie to samo? –