Функция load_class

Я пытаюсь создать функцию, которая будет автоматически загружать классы, поэтому я могу сделать что-то вроде этого:

load_class('Db');
$db->query();

Вот мой код до сих пор. Он загружает файл и создает экземпляр класса успешно, но когда я пытаюсь вызвать метод, как описано выше, я получаю Call to member function ошибка.

Вот мой код:

function load_class($class) {
    $file = 'classes/' . $class . '.php';

    if (file_exists($file)) {
        include_once($file);

        if (class_exists($class)) {
            $class = new $class();
            return $class;
        }
    }
}

Что мне не хватает?

Спасибо!

2 ответа

Решение

load_class вернуть экземпляр Db класс, если он нашел объявление.

Вам может потребоваться сделать:

$db = load_class('Db');
if (!$db) {
  throw new Exception('Failed to load db!');
}
$db->query();

Но, если вы хотите автоматически загрузить класс, когда вы делаете $db = new Db;, тогда вы должны взглянуть на автозагрузку PHP.

Пример:

function load_class($class) {
    $file = 'classes/' . $class . '.php';
    if (file_exists($file)) {
        include_once($file);
    }
}
spl_autoload_register('load_class');

Чтобы ваш код работал, сделайте так:

$db = load_class('Db');
$db->query();
Другие вопросы по тегам