如何修复此PHP错误?

时间:2010-01-18 05:23:54

标签: php

我有一个显示在页面顶部的标题方法,它位于一个类中,在我的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';

但是我现在在页脚文件中收到此错误消息,

  

注意:未定义的变量:profiler   在   C:\网络服务器\ htdocs中\ friendproject2 \包括\ footer.inc.php   在第21行

     

致命错误:调用成员函数   end()在非对象中   C:\网络服务器\ htdocs中\ friendproject2 \包括\ footer.inc.php   在第21行

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:6)

如果你在header方法中创建了$ profiler对象,它将无法在另一个方法中使用,除非它是一个全局$ profiler是一个全局变量,或者它是一个单例。

要使其成为全局,请在header方法之外声明$ profiler,然后在header方法中包含以下行:

global $profiler;

也可以在页脚方法中包含此行。其余的代码可以保持原样。它应该工作。

答案 1 :(得分:3)

在函数中创建的变量是该函数的本地变量。使用global keyword声明一个全局变量。

答案 2 :(得分: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();

答案 3 :(得分:0)

可能的步骤:

  1. 首先确保包含包含探查器类的文件。
  2. 如果您在函数中使用了探查器实例,则需要使用global关键字:

    全球$ profiler;

答案 4 :(得分:0)

我认为如果从标题顶部删除session(),您的问题将得到解决......