Вопрос по private, php, class, variables – PHP - Частные переменные класса дают ошибку: неопределенная переменная

11

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

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

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

Ваш Ответ

4   ответа
3

$interval является локальным для функции.$this->interval ссылается на вашу частную собственность.

{
    //@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';
    }

}
Отлично, это была последняя часть головоломки, которую мне не хватало. CHawk
0

пытаясь

public var $interval;

а также

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

Вы должны использовать$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
    }
}
Спасибо вам за помощь! Я использую для языков, где это не является обязательным. В любом случае, когда я убираю 2-й знак доллара, я получаю эту ошибку: Неустранимая ошибка: вызов функции-члена format () для необъекта CHawk
echo $ this -> $ interval-> format ("% d days old </br>"); Также дает мне ту же ошибку: / CHawk
Я всегда нахожу довольно «странным», что PHP заставляет вас использовать$this для доступа к полям объекта. Многие другие языки, такие как C #, не будут (если переменная не совпадает с именем локального). В любом случае использованиеthis Это всегда хорошая практика, ИМХО: это помогает вам быстро взглянуть на свойства объекта и избежать путаницы с локальными переменными. gremo
удалить второй знак доллара. Это $ this-> интервал Jonathon Reinhart
Определенно. Python предъявляет те же требования (с «self». Хотя «self» - это просто соглашение, и вы должны фактически указать параметр «self» в функции). Я не против, потому что это гарантирует, что вы знаете, на что действительно ссылаетесь. Это очень важно в этих динамических языках, когда вы можете объявлять вещи повсюду. Jonathon Reinhart

Похожие вопросы