2010-01-18 13 views
0

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

//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'; 

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

Notice: Undefined variable: profiler in C:\webserver\htdocs\friendproject2\includes\footer.inc.php on line 21

Fatal error: Call to a member function end() on a non-object in C:\webserver\htdocs\friendproject2\includes\footer.inc.php on line 21

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

+2

365 Вопросов, поздравляю! –

+1

Вы задали почти этот _exact тот же самый вопрос вчера: http: // stackoverflow.com/questions/2080369/can-i-have-a-class-method-include-a-header-file-for-me-in-php Что вы не поняли? – hobodave

+2

Прочтите http://php.net/manual/en/language.variables.scope.php дважды. – hobodave

ответ

6

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

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

global $profiler;

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

3

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

0

Я предлагаю сделать свойство $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(); 
0

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

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

    глобальный $ профилировщика;

+0

Вы имели ввиду global;) –

+0

да вот что я имел в виду: исправлено :) – Sarfraz

0

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

Смежные вопросы