Автозагрузка классов пространств имен

Я искал ответ «высоко» и «низко» и пробовал каждый пример, но мне все равно не удалось найти мои уроки. Почему я продолжаю получать Фатальная ошибка: Класс ‘ProjectMorpheus \ model \ Database’ не найден в C: \ Portables \ xampp \ htdocs \ ProjectMorpheus \ config \ config.php в строке 23

/ProjectMorpheus
/model
Database.class.php
/config
config.php

Итак, мой класс Database имеет пространство имен, подобное этому:

namespace ProjectMorpheus\model;
class Database { ... }

Наконец, мой config.php имеет функцию автозагрузчика (Примечание: __SITE_PATH = ‘C: \ Portables \ xampp \ htdocs \ ProjectMorpheus \’):

/*** auto load model classes ***/
function __autoload($class){
$parts = explode('\\', $class);
include __SITE_PATH . 'model/' . end($parts) . '.class.php';
}

$dbh = \ProjectMorpheus\model\Database::getInstance($dsn, $username, $password);

Использование spl_autoloader работает, но почему? Мое единственное предположение, что $ class не одинаков в обоих случаях. Моя функция spl_function выглядит так:

spl_autoload_register(function($class){
$parts = explode('\\', $class);
include __SITE_PATH . 'model/' . end($parts) . '.class.php';
});

0

Решение

Почему ты не используешь PSR-0 или же PSR-4 Стандарты автозагрузчика?

У них даже есть готовый класс автозагрузчика на GitHub Пока вы будете следовать правилам, у вас не будет никаких проблем, и ваш код будет PSR.

Хотя я бы не советовал, но если вы хотите настаивать на использовании приведенного выше кода для автозагрузки классов (только в папке моделей), попробуйте сбросить значение этого параметра. __SITE_PATH . 'model/' . end($parts) . '.class.php'; и проверьте, можете ли вы получить к нему доступ. Вы можете даже попытаться скопировать и вставить путь к вашему файловому броузеру, чтобы увидеть, доступно ли это местоположение и существует ли файл в этом каталоге.

Постскриптум Я пытался добавить это как комментарий, но не смог из-за низкой репутации. очки (будучи новым здесь и все).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]