2011-10-12 8 views
9

sto ottenendo l'errore "Variabile non definita: intervallo in C: \ wamp \ www \ DGC \ Classes \ DateFilter.php"PHP - variabili di classe privata che dà errore: non definito variabile

Ecco il mio codice per la DateFilter classe:

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

} 

Quando creo una nuova istanza della classe DateFilter e il test di chiamata() mi dà l'errore. Mi rendo conto che significa che la variabile non è stata inizializzata, ma so che il costruttore viene chiamato perché ho inserito un'istruzione echo e l'output è stato eseguito.

Ho anche provato: $ questo :: $ intervallo-> formato (...); self :: $ interval-> format (...); ma non ha funzionato.

So che questa è probabilmente una soluzione semplice, mi dispiace per la domanda noob. Non posso credere che questo mi abbia bloccato.

risposta

27

È necessario utilizzare $this->interval per accedere alla variabile membro interval in PHP. Vedere 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 -> $ per intervallo> format ("% d giorni vecchi
"); Mi dà anche lo stesso errore:/ – CHawk

+6

rimuovere il secondo segno di dollaro. È $ this-> interval –

+1

Ho sempre trovato abbastanza "strano" che PHP ti costringa a usare '$ this' per accedere ai campi dell'oggetto. Molti altri linguaggi come C# non lo faranno (se la variabile non ha lo stesso nome di uno locale). Ad ogni modo l'uso di "questo" è sempre una buona pratica, IMHO: ti aiuta a dare un'occhiata veloce alle proprietà dell'oggetto ed evitare confusione con le variabili locali. – gremo

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

cercando

public var $interval; 

e

echo $this->interval; 
3

$interval è locale alla funzione. $this->interval fa riferimento alla tua proprietà privata.

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

Perfetto, quello era l'ultimo pezzo del puzzle che mi mancava. – CHawk

Problemi correlati