In meinem include_path auf der Server-Seite ich einen Verweis auf eine Birne Verzeichnis haben, in '/ usr/share/Birne /'. In meinen Anwendungen umfasse ich Dateien aus einer gemeinsamen Bibliothek, das Leben in '/ usr/share/Birne/library /' mit require_once 'library/file.php'
.SPL Autoloading Best Practices
ich vor kurzem die spl Autoloader verwendet haben begonnen, bemerkte ich in der Ladefunktion Sie, mit dem die Logik, um zu bestimmen haben, die Datei zu schließen. Mein erster Weg, dies zu tun, war zu versuchen, eine Datei einzuschließen und sie mit @
zu unterdrücken, um zu sehen, ob sie fehlschlagen würde, z. @include 'library/file.php'
aber ich denke, vor allem, weil ich viel über @
ist eine schlechte Praxis habe ich beschlossen, lesen Sie die Arbeit selbst manuell zu tun, indem get_include_path
durch die PATH_SEPARATOR
explodiert und zu sehen, ob das Verzeichnis ist, was ich es sein will, dann eine file_exists
tun und es einschließlich .
Wie so:
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');
Gehe ich den falschen Weg? Sollte ich gerade das @include
Geschäft gemacht haben oder mache ich es etwas in die richtige Richtung?
Ist nicht die spl die praktischere und moderne Methode selbstladende? Oder sind sie im Grunde dasselbe? –