2011-10-12 171 views
9

我收到錯誤「未定義的變量:區間在C:\ WAMP \ WWW \ DGC \類\ DateFilter.php」PHP - 私有類變量給錯誤:未定義的變量

這裏是我的DateFilter碼類:

class DateFilter extends Filter 
{ 
    //@param daysOld: how many days can be passed to be included in filter 
    //Ex. If daysOld = 7, everything that is less than a week old is included 
    private $interval; 

    public function DateFilter($daysOld) 
    { 
     echo 'days old' . $daysOld .'</ br>'; 
     $interval = new DateInterval('P'.$daysOld.'D'); 
    } 


    function test() 
    { 
     echo $interval->format("%d days old </br>"); 
     //echo 'bla'; 
    } 

} 

當我創建DateFilter類和呼叫測試的新實例()它給我的錯誤。我意識到這意味着變量還沒有被初始化,但我知道構造函數被調用,因爲我在那裏放置了一個echo語句,並且它被輸出。

我也嘗試過: $ this :: $ interval-> format(...); self :: $ interval-> format(...); 但它沒有奏效。

我知道這可能是一個簡單的修復,對於noob問題抱歉。我不敢相信這讓我難堪。

回答

27

您必須使用$this->interval訪問PHP中的成員變量interval。見PHP: The Basics

class DateFilter extends Filter 
{ 
    private $interval; // this is correct. 

    public function DateFilter($daysOld) 
    { 
     $this->interval = new DateInterval('P'.$daysOld.'D'); // fix this 
    } 

    function test() 
    { 
     echo $this->interval->format("%d days old </br>");  // and fix this 
    } 
} 
+0

echo $ this - > $ interval-> format(「%d days old
」); 也給我這個同樣的錯誤:/ – CHawk

+6

刪除第二個美元符號。它是$ this-> interval –

+1

我總是發現PHP非常「奇怪」,迫使你使用'$ this'來訪問對象字段。許多其他語言(如C#)不會(如果變量與本地名稱不同)。無論如何,使用'this'總是一個好習慣,恕我直言:它可以幫助您快速查看對象屬性並避免與局部變量混淆。 – gremo

2
function test() 
{ 
    echo $this->interval->format("%d days old </br>"); 
} 
0

試圖

public var $interval; 

echo $this->interval; 
3

$interval是本地功能。 $this->interval引用您的私人財產。

class DateFilter extends Filter 
{ 
    //@param daysOld: how many days can be passed to be included in filter 
    //Ex. If daysOld = 7, everything that is less than a week old is included 
    private $interval; 

    public function DateFilter($daysOld) 
    { 
     echo 'days old' . $daysOld .'</ br>'; 
     $this->interval = new DateInterval('P'.$daysOld.'D'); 
    } 


    function test() 
    { 
     echo $this->interval->format("%d days old </br>"); 
     //echo 'bla'; 
    } 

} 
+0

完美,這是我錯過的最後一塊拼圖。 – CHawk