PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Autoload endet mit Fatal Error (https://www.php-resource.de/forum/php-developer-forum/105383-autoload-endet-mit-fatal-error.html)

Chrissi007 26-11-2015 11:59

Autoload endet mit Fatal Error
 
Hi Leute,

Hier wird im ersten Kommentar eine interessante Methode bezüglich Autoload beschrieben: PHP: spl_autoload_register - Manual
Also, dachte ich mir, probier ich das aus:

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

-------------------------------

index.php:

PHP-Code:

<?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-Code:

<?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:

PHP-Code:

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:28 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG