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

CHa*_*awk 13 php variables private class

我收到错误"未定义的变量:C:\ wamp\www\DGC\classes\DateFilter.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';
    }

}
Run Code Online (Sandbox Code Playgroud)

当我创建一个DateFilter类的新实例并调用test()时,它会给我错误.我意识到这意味着变量尚未初始化,但我知道正在调用构造函数,因为我在其中放置了一个echo语句并且它是输出的.

我也尝试过:$ this :: $ interval-> format(...); 自:: $ interval->格式(...); 但它不起作用.

我知道这可能很容易解决,对于noob问题我很抱歉.简直不敢相信这让我难过.

Jon*_*art 35

您必须使用PHP $this->interval来访问成员变量interval.请参阅PHP:基础知识

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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 删除第二个美元符号.这是$ this-> interval (9认同)
  • 我一直觉得 PHP 强迫你使用 `$this` 来访问对象字段很“奇怪”。许多其他语言(例如 C#)不会(如果变量与本地变量的名称不同)。无论如何,使用“this”始终是一个很好的实践,恕我直言:它可以帮助您快速查看对象属性并避免与局部变量混淆。 (2认同)