Динамически загружать класс для глобального доступа (как это делает codeigniter) - PullRequest
0 голосов
/ 09 октября 2010

Вот основы моего фреймворка:

class CPU {

    public function load_class($class) {
        include_once($class . ".php");
        $this->$class = new $class;
    }

    public function load_controller($class) {
        include_once($class . ".php");
        $class = new $class;
        $class->index();
    }

    public function run() {

        // Load DB class
        $this->load_class("DB");

        // Load controller
        $this->load_controller("About");
    }
}

class About extends CPU {
    public function index() {
        $this->DB->connect();
    }
}

Когда run() вызывается для загрузки класса About, доступ к $DB дает ошибку ниже:

Неустранимая ошибка : вызов функции-члена connect () для необъекта

Полагаю, мне нужно использовать одноэлементный файл для динамического создания класса. CodeIgniter работает таким же образом, но я не могу понять, что мне нужно сделать, чтобы изменить мою структуру, чтобы эта работа работала?

1 Ответ

2 голосов
/ 09 октября 2010

Я предлагаю использовать __ autoload () или spl_autoload_register () для загрузки ваших классов вместо жесткого кодирования include ().

Что касается вашей проблемы, класс "About" никогда не создает экземпляр члена БД. Его родитель, CPU, также не имеет члена БД. Другими словами, вы, вероятно, хотите, чтобы БД была членом ЦП или О. Трудно сказать, не зная, что ты пытаешься сделать.

Даже если вы сделаете DB членом любого из них, вам все равно придется добавить его в экземпляр класса About, который создается в load_controller ().

Другими словами, кажется, что вы на самом деле просто делаете это неправильно. Эта БД не имеет никакого отношения к О. Трудно оказать вам дополнительную помощь, не зная точно, что вы пытаетесь сделать.

Об использовании Синглтона, который не имеет ничего общего с чем-либо. Синглтон - это просто класс, который вам нужен только один. Они часто злоупотребляются и неправильно. Используйте с осторожностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...