Support » Allgemeine Fragen » PHP autoloading $class_name falsch/namespace fehlt

  • Ich habe ein Problem mit dem automatischen Laden von Klassen in meinem Child Theme. Ich möchte autoloading benutzen, weil es besser ist, als jede einzelne Klasse einzubinden.

    Leider scheint mein Autoloader noch nicht richtig zu funktionieren, denn ich erhalte immer noch diesen Fehler:

    Uncaught Error: Class 'User_Notification_Creator' not found

    So sieht mein User_Notification_Creator aus:

    <?php
    
    namespace Beardo;
    
    defined('ABSPATH') || exit;
    
    class User_Notification_Creator
    {
        public function __construct()
        {
            echo 'Hi';
        }
    }

    So habe ich jetzt ein neues Objekt meiner Klasse erstellt:

    <?php
    
    use Beardo\User_Notification_Creator;
    
    $notification_creator = new User_Notification_Creator();

    So sieht mein Autoloader aus. Ich habe diesen Code in der functions.php meines Child Themes abgelegt:

    <?php
    
    defined('ABSPATH') || exit;
    
    spl_autoload_register('beardo_autoloader');
    function beardo_autoloader($class_name)
    {
        $namespace = 'Beardo';
    
        error_log($class_name);
    
        if (strpos($class_name, $namespace) === false) { //This check fails -> no require_once
            return;
        }
    
        $class = str_replace($namespace, '', $class_name);
        $class = str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';
    
        $dir = __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'classes';
        $file = $dir . DIRECTORY_SEPARATOR . $class;
    
        error_log($file);
    
        if (file_exists($file)) {
            require_once($file);
        }
    }

    Ich habe versucht, $class_name auszuloggen, aber ich erhalte nur User_Notification_Creator ohne meinen Namespace. Deshalb überspringt der strpos Test das require_once. Das Problem ist, dass ich absolut nicht weiß, was ich falsch gemacht habe, so dass der Namespace komplett fehlt:

    [26-Mar-2020 18:30:31 UTC] User_Notification_Creator

    Ich bin diesem Tutorial gefolgt: https://awhitepixel.com/blog/how-to-implement-an-autoloader-with-namespaces-in-your-theme-or-plugin/

    Was mache ich hier falsch? Ich verstehe es nicht.. Danke fürs Helfen!

Ansicht von 1 Antwort (von insgesamt 1)
  • Deine Frage ist eigentlich in einem PHP-Forum besser aufgehoben und hat mit WordPress nur insofern etwas zu tun, dass du ein Child Theme erstellst.
    Ich setze den Status deshalb auf „Keine Support-Frage“, lasse den Thread aber offen – vielleicht hat jemand Zeit für eine kurze Antwort.

Ansicht von 1 Antwort (von insgesamt 1)