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 nurUser_Notification_Creator
ohne meinen Namespace. Deshalb überspringt derstrpos
Test dasrequire_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!
- Das Thema „PHP autoloading $class_name falsch/namespace fehlt“ ist für neue Antworten geschlossen.