PHP - 私有类变量给错误:未定义的变量

问题描述:

我收到错误“未定义的变量:区间在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问题抱歉。我不敢相信这让我难堪。

您必须使用$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

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

试图

public var $interval; 

echo $this->interval; 

$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