2011-10-12 2 views
9

estoy consiguiendo el error "Undefined variable: intervalo en C: \ wamp \ www \ DGC \ classes \ DateFilter.php"PHP - variables de clase privada que da error: no definido variables

Aquí está mi código para el DateFilter clase:

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

} 

al crear una nueva instancia de la clase DateFilter y prueba de llamada() me da el error. Me doy cuenta de que significa que la variable no se ha inicializado, pero sé que se está llamando al constructor porque puse una declaración de eco allí y se publicó.

También he intentado: $ this :: $ interval-> format (...); self :: $ interval-> format (...); pero no funcionó.

Sé que esto es probablemente una solución fácil, lo siento por la pregunta de novato. No puedo creer que esto me haya dejado perplejo.

Respuesta

27

Tienes que usar $this->interval para acceder a la variable miembro interval en PHP. Ver 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 días anterior
"); También me está dando el mismo error:/ – CHawk

+6

elimina el segundo signo de dólar. Es $ this-> interval –

+1

Siempre me ha parecido bastante "extraño" que PHP te obligue a usar '$ this' para acceder a los campos del objeto. Muchos otros lenguajes como C# no lo harán (si la variable no tiene el mismo nombre que uno local). De todos modos, el uso de 'this' siempre es una buena práctica, en mi humilde opinión: te ayuda a mirar rápidamente las propiedades de los objetos y evitar la confusión con las variables locales. – gremo

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

tratando

public var $interval; 

y

echo $this->interval; 
3

$interval es local a la función. $this->interval hace referencia a su propiedad privada.

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

Perfecto, esa fue la última pieza del rompecabezas que me faltaba. – CHawk

Cuestiones relacionadas