使用require_once后的未定义变量

时间:2009-12-26 00:34:34

标签: php

我创建了一个Page类,我网站上的所有页面都是该Page类的对象。每个Page对象都有一个title属性,该属性作为参数传递给构造函数,因此创建一个新的Page对象如下所示。

<?php

require_once('library/Page.php');

$page = new Page('About');

$page->header();

这就是出现问题的地方。

header()方法是......

public function header()
{   

    require_once($this->templatePath . 'header.php');

}

然后我使用

回显页面标题
<?php echo $page->title; ?>

但是,我收到以下错误。

  


通知:未定义   变量:页面    /Users/aaronfalloon/Projects/PHP/tfm/template/header.php 的   在线 19

  通知:试图获取财产   非对象的    /Users/aaronfalloon/Projects/PHP/tfm/template/header.php 的   在线 19

4 个答案:

答案 0 :(得分:2)

使用$this->title代替$page->title,因为您引用了同一个实例的属性。

答案 1 :(得分:2)

让我进一步解释Gumbo所写的内容。

当您包含模板文件时,您在头函数中执行了WITHIN操作,从而使模板文件中的所有$ page变量引用头函数中的本地$ page变量,显然未声明/定义。 / p>

您应该使用$ this-&gt;标题来引用当前的类。

类似

class Page{

  public function header(){
    echo $this->title;
  }

}

当您尝试包含模板文件时:

// page class
class Page{

  public function header(){
    include('template.php');
  }

}

// template file
echo $this->title;

答案 2 :(得分:0)

我不确定,可以通过在global $page;函数require_once调用之前添加Page::header来解决此问题。

require_once包含指定文件的代码并执行它以保持当前范围。在Page::header函数中,$page不可见。

答案 3 :(得分:0)

$page被声明为全局,header.php代码只有该方法的局部范围。

或者: 在global $page之前的方法声明后使用require_once$page作为参数public function header($page)传递到标题函数中 在header.php中使用echo $this->title

或者,如果您真的想要使用extract(get_object_vars($this))echo $title