Возможная проблема многоэкземплярных объектов в PHP - PullRequest
1 голос
/ 21 января 2009

Я получаю «Вызов функции-члена process_data () для необъекта в page.class.php в строке 35», даже если объект был вызван.

Вот извлечение index.php, показывающее моментализируемый объект

// require our common files
require("modules/module.php");
require("registry/objects/datetime.class.php");
require("registry/objects/page.class.php");


// load in all the objects
$datetime = new dateandtime;
$page = new page;
$module = new module;

Затем он переходит к классу Process

        require("template.class.php");
        $template = new template($php_path . "controllers/themes/adm/" . $page . ".html");

        // Place in both commonly used language and page specific language
        $template->language($php_path . "controllers/language/en/adm/common.php");
        $template->language($php_path . "controllers/language/en/adm/" . $page . ".php");

        // Tell the page's module to load in data it needs
        $module->process_data("module_" . $page);

        // Output the final result
        $template->output();

Именно в этот момент PHP выдает ошибку. Содержимое файла module.php выглядит следующим образом

class module {

    public function process_data ($child) {
        require($child . ".php");
        read_data();
        return true;
    }
}

Я попытался переместить объявление экземпляра во второй вставленный код, но это приводит к большему количеству ошибок, потому что класс, который вызывает «модуль», затем использует также некоторые классы «шаблона» - поэтому возникает та же проблема чуть дальше по линии.

Что я ошибаюсь в ней или совсем скучаю, я уверен, что это последнее, но мне действительно нужна помощь здесь. Спасибо

1 Ответ

0 голосов
/ 21 января 2009

Мне кажется, что переменная $ module не была в области видимости при попытке вызвать метод объекта. Не могли бы вы попробовать var_dump ($ module) перед $ module-> process_data ("module_". $ Page). Каков результат этой функции? Быстрое решение может объявить глобальный $ module, но глобальные не очень хорошая идея в любом случае (но вы можете проверить, работает ли он).

...