2009-12-26 68 views
2

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

<?php 

require_once('library/Page.php'); 

$page = new Page('About'); 

$page->header(); 

这是问题出现的地方。

头()方法是...

public function header() 
{ 

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

} 

然后我使用呼应

<?php echo $page->title; ?> 

不过,我得到以下错误页面标题。


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

通知:试图获取非物件 /Users/aaronfalloon/Projects/PHP/tfm/template/header.php 在线

+0

诊断一个我们没有见过的类是很困难的。向我们展示你班上发生了什么事。 – Sampson 2009-12-26 00:38:30

回答

2

让我进一步解释Gumbo写了些什么。

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

您应该使用$ this-> title来引用当前类。

这多少有点像

class Page{ 

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

} 
当您尝试包括模板文件

// page class 
class Page{ 

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

} 

// template file 
echo $this->title; 
+0

谢谢,我现在明白了。 – aaronfalloon 2009-12-26 10:04:38

+0

完全没问题! – mauris 2009-12-26 10:11:02

0

我不知道,有可能通过在Page::header功能require_once调用之前加入global $page;来解决这个问题。

require_once包含指定文件的代码并执行它以保持当前作用域。在您的Page::header功能中,$page不可见。

2

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

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