php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Autoload endet mit Fatal Error


 
Chrissi007
26-11-2015, 11:59 
 
Hi Leute,

Hier wird im ersten Kommentar eine interessante Methode bezüglich Autoload beschrieben: PHP: spl_autoload_register - Manual (http://php.net/manual/de/function.spl-autoload-register.php)
Also, dachte ich mir, probier ich das aus:

Meine Verzeichnisstruktur in diesem Beispiel:
\index.php
\_includes\testklasse.php
-------------------------------

index.php:
<?php // Autoloader initialisieren
spl_autoload_extensions('.php');
spl_autoload_register();

// Versuch...
$go = new _includesBACKSLASHtestklasse; ?>
die letzte Zeile lautet: $go = new _includes\testklasse; ?> (sie wird im PHP-Tag hier im Forum nicht richtig dargestellt)

\includes\testklasse.php:
<?php
namespace _includes;

class testklasse {

public function __construct()
{
echo 'test';
}
}?>

Beim Aufruf der index.php endet das ganze mit : Fatal error: Class '_includes\testklasse' not found
ein $go = new \_includes\testklasse; scheitert ebenso...

Ein Aufruf von var_dump(spl_autoload_register()); liefert ein TRUE.

Wo liegt denn hier nun mein Denkfehler? :charity:

 
mermshaus
27-11-2015, 03:52 
 
Musst dein _includes-Verzeichnis dem Include-Pfad hinzufügen, damit das so funktioniert.

Aber ich würde das nicht in der Form nutzen, weil man den Include-Pfad im Grunde überhaupt nicht braucht.

Eine brauchbare Kurzversion für einen Autoloader ist das hier:

spl_autoload_register(function ($className) {
$path = __DIR__ . '/src/' . str_replace('\\', '/', $className) . '.php';

if (is_readable($path)) {
require $path;
}
});

Sucht eine Klasse Foo\Bar\Baz in ./src/Foo/Bar/Baz.php.

 
Chrissi007
27-11-2015, 15:51 
 
Alles klar, danke soweit! :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:33 Uhr.