我有一个显示在页面顶部的标题方法,它位于一个类中,在我的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行
我该如何解决这个问题?
答案 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)
可能的步骤:
如果您在函数中使用了探查器实例,则需要使用global关键字:
全球$ profiler;
答案 4 :(得分:0)
我认为如果从标题顶部删除session(),您的问题将得到解决......