У меня проблема с PHP автозагрузкой. Я хочу использовать его, потому что это лучше, чем требовать каждый отдельный класс, где он мне нужен.
Но в моей текущей реализации я получаю сообщение об ошибке:
Uncaught Error: Class 'User_Notification_Creator' not found
Итак, давайте посмотрим в этот класс:
<?php
namespace Beardo;
defined( 'ABSPATH' ) || exit;
class User_Notification_Creator {
public function __construct() {
echo 'Hi';
}
}
Чтобы использовать его сейчас, я сделал это:
<?php
use Beardo\User_Notification_Creator;
$notification_creator = new User_Notification_Creator();
Теперь у меня есть пространство имен и сборка моего автозагрузчика:
<?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 );
}
}
Я попытался выйти из имени класса, но я получаю только User_Notification_Creator
без моего пространства имен. Вот почему тест strpos
пропускает require_once
. Проблема в том, что я абсолютно не знаю, что я сделал неправильно, так что пространство имен полностью отсутствует:
[26-Mar-2020 18:30:31 UTC] User_Notification_Creator
Я ожидал такой вывод:
[26-Mar-2020 18:30:31 UTC] Beardo\User_Notification_Creator
Я следовал этому уроку здесь : https://awhitepixel.com/blog/how-to-implement-an-autoloader-with-namespaces-in-your-theme-or-plugin/
Спасибо за помощь!