PHP автозагрузка получает ошибочное (нет) пространство имен (WordPress) - PullRequest
0 голосов
/ 26 марта 2020

У меня проблема с 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/

Спасибо за помощь!

...