Как исправить эту ошибку PHP? - PullRequest
0 голосов
/ 18 января 2010

У меня есть метод заголовка, который отображается в верхней части страницы, он внутри класса, внутри моего метода header (). Я запускаю этот код здесь, чтобы запустить новый объект Profiler ...

//start new page timer object
$profiler = new Profiler;
$profiler->start();

После компиляции нескольких других файлов я включаю файл в раздел нижнего колонтитула, в этом файле я запускаю этот код,

echo 'Page Generated in ' .$profiler->end(). ' of a second with ' .$_SESSION['querie_counter']. ' MySQL Queries';

Однако сейчас я получаю это сообщение об ошибке в файле нижнего колонтитула,

Примечание: неопределенная переменная: профилировщик в C: \ вебсервер \ HTDOCS \ friendproject2 \ включает \ footer.inc.php по линии 21

Неустранимая ошибка: вызов функции-члена end () для необъекта в C: \ вебсервер \ HTDOCS \ friendproject2 \ включает \ footer.inc.php по линии 21

Как я могу это исправить?

Ответы [ 5 ]

6 голосов
/ 18 января 2010

Если вы создали объект $ profiler внутри метода header, он не будет доступен в другом методе, если только он не был глобальным $ profiler, не был глобальной переменной или не являлся синглтоном.

Чтобы сделать его глобальным, объявите $ profiler вне метода заголовка, а затем внутри метода заголовка включите эту строку:

global $profiler;

Включите эту строку в метод нижнего колонтитула. Остальная часть вашего кода может оставаться такой, какая она есть. Это должно работать.

3 голосов
/ 18 января 2010

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

0 голосов
/ 18 января 2010

Думаю, если вы удалите session () из верхней части вашего заголовка, ваши проблемы будут исправлены ...

0 голосов
/ 18 января 2010

Возможные шаги:

  1. Прежде всего, убедитесь, что вы включили файл, который содержит класс профилировщика.
  2. Если вы используете экземпляр профилировщика внутри функции, вам нужно использовать ключевое слово global:

    global $ profiler;

0 голосов
/ 18 января 2010

Я бы предложил сделать $profiler свойством основного класса и инициализировать его внутри метода конструктора, поскольку он на самом деле не связан с заголовком.

Предполагая, что это основной класс

class Example {
    private $profiler;

    public function __construct() {
        $this->profiler = new Profiler;
    }

    public function header() {
        ...
    }
}

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

$example = new Example();
$example->profiler->start();
$example->header();

Внутри включенного нижнего колонтитула:

$example->profiler->end();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...