PHP - Частные переменные класса дают ошибку: неопределенная переменная - PullRequest
12 голосов
/ 13 октября 2011

Я получаю сообщение об ошибке "Неопределенная переменная: интервал в 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';
    }

}

Когда я создаю новый экземпляр класса DateFilter и вызываю test (), он выдаёт мне ошибку. Я понимаю, что это означает, что переменная не была инициализирована, но я знаю, что вызывается конструктор, потому что я поместил туда оператор echo, и он был выведен.

Я также пробовал: $ Это ::> формат $ interval- (...); самостоятельно :: $ interval-> формат (...); но это не сработало.

Я знаю, что это, вероятно, легко исправить, извините за вопрос новичка. Не могу поверить, что это поставило меня в тупик.

Ответы [ 4 ]

32 голосов
/ 13 октября 2011

Вы должны использовать $this->interval для доступа к переменной-члену interval в PHP. См. 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
    }
}
3 голосов
/ 13 октября 2011

$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';
    }

}
2 голосов
/ 13 октября 2011
function test()
{
    echo $this->interval->format("%d days old </br>");
}
0 голосов
/ 13 октября 2011

пытается

public var $interval;

и

echo $this->interval;
...