PHP - Privé variables de classe donnant erreur: undefined variable
J'obtiens l'erreur "Undefined variable: intervalle de C:\wamp\www\DGC\classes\DateFilter.php"
Voici mon code pour le 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';
}
}
Lorsque je crée une nouvelle instance de la DateFilter de la classe et de l'appel de test() me donne l'erreur. Je me rends compte qu'il signifie que la variable n'a pas été initialisée, mais je sais que le constructeur est appelé car j'ai mis un echo déclaration, il était de sortie.
J'ai aussi essayé:
$this::$interval->format(...);
self::$interval->format(...);
mais il ne fonctionne pas.
Je sais que c'est probablement une solution facile, désolé pour la question de noob. Ne crois pas que ce perplexe moi.
OriginalL'auteur CHawk | 2011-10-12
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
$this->interval
pour accéder à la variable membreinterval
en PHP. Voir PHP: Les Basessupprimer le deuxième signe de dollar. C'est $this->intervalle de
J'ai toujours trouver assez "étrange" que PHP vous oblige à utiliser
$this
pour accéder aux champs d'objet. Beaucoup d'autres langages tels que C# ne va pas (si la variable n'a pas le même nom de "local"). De toute façon l'utilisation dethis
est toujours une bonne pratique, à mon humble avis: il vous permet d'œil rapide sur les propriétés de l'objet et d'éviter la confusion avec les variables locales.Certainement. Python a la même exigence (avec "auto." bien que " moi "n'est qu'une convention, et que vous avez réellement un "self" paramètre dans une fonction). Je n'ai pas l'esprit, car il permet de s'assurer que vous savez ce que vous êtes réellement le référencement. Tout à fait important dans la dynamique de ces langues, vous pouvez déclarer des choses un peu partout.
Merci pour l'aide! Je suis d'utilisation des langues où l'ceci est facultatif. De toute façon, quand je retire le 2ème signe de dollar, j'ai cette erreur: Fatal error: Appel à un membre de la fonction format() sur un non-objet
OriginalL'auteur Jonathon Reinhart
$interval
est locale à la fonction.$this->interval
les références de votre propriété privée.OriginalL'auteur Herbert
OriginalL'auteur CheeseSucker
essayer
et
OriginalL'auteur Jan Wiemers