2009-12-26 49 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