2011-10-12 9 views
9

otrzymuję błąd "Undefined zmiennej: przerwa w katalogu C: \ wamp \ www \ DGC \ Classes \ DateFilter.php"PHP - prywatnych klasy zmiennych dające błąd: niezdefiniowana zmienna

Oto mój kod na DateFilter klasa:

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

} 

Kiedy tworzę nową instancję klasy DateFilter i test wywołania(), daje mi to błąd. Rozumiem, że oznacza to, że zmienna nie została zainicjalizowana, ale wiem, że konstruktor jest wywoływany, ponieważ umieściłem w nim instrukcję echo i została ona wyprowadzona.

Próbowałem również: $ this :: $ interval-> format (...); self :: $ interval-> format (...); ale to nie zadziałało.

Wiem, że to prawdopodobnie łatwa łatka, przepraszam za pytanie nooba. Nie mogę uwierzyć, że to mnie zaskoczyło.

Odpowiedz

27

Musisz użyć $this->interval, aby uzyskać dostęp do zmiennej członkowskiej interval w PHP. Zobacz 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 dni stary
"); Daje mi również ten sam błąd:/ – CHawk

+6

usunięcie drugiego znaku dolara. To jest $ this-> interval –

+1

Zawsze znajdowałem dość "dziwne", że PHP zmusza cię do użycia '$ this' w celu uzyskania dostępu do pól obiektu. Wiele innych języków, takich jak C#, nie będzie (jeśli zmienna nie ma tej samej nazwy lokalnej). W każdym razie użycie "tego" jest zawsze dobrą praktyką, IMHO: pomaga szybko spojrzeć na właściwości obiektu i uniknąć nieporozumień ze zmiennymi lokalnymi. – gremo

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

próbuje

public var $interval; 

i

echo $this->interval; 
3

$interval jest lokalny do funkcji. $this->interval odnosi się do Twojej własności prywatnej.

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

Doskonały, to był ostatni element układanki, którego mi brakowało. – CHawk

Powiązane problemy