PHP Débutant question; “notice: undefined property”

J'exécute le code suivant:

class Foo {  
    private $var = 0;

    function isVarSet () {
           return ($this->var != 0);
    }
}

...

foo = new Foo();

résultats dans une "propriété non définie" avis: foo::$var sur mon PHP (ver. 5.3.5).

si je réécrire juste la fonction isVarSet():

function isVarSet() {
    if (isset($this->var))
        return ($this->var != 0);
    return false;
}

l'avis disparaît.

Ce que je ne comprends pas. $var est définie dans les deux cas, pourquoi serait-il une propriété non définie? Pourquoi ai-je besoin pour utiliser la fonction isset() pour éviter de cet avis? Aussi, pourquoi l'avis reportez-vous à $var avec le champ d'application de l'opérateur :: ? Je ne suis pas en utilisant une classe statique, je suis en utilisant une instance de foo. $foo->isVarSet() doit accéder à un $var qui est à la fois défini et non statique.

J'ai travaillé sur ce projet pendant des heures maintenant, et de lire les autres réponses sur la propriété non définie avis, mais celui-ci je n'ai tout simplement pas l'obtenir. Merci de m'éclairer, StackOverFlow maîtres.


le code de mon formulaire:

<?php

class session {

    private $userId = 0;

    function __construct() {
    session_start();
    $this->setUserId();
    }

    public function isLoggedIn() {
    //if (isset($this->userId))
        return ($this->userId != 0);
    //return false;
    }

    function getUserId() {
    if (isset($this->userId))
        return $this->userId;
    else
        return false;
    }

    private function setUserId() {
    if (isset($_SESSION['userId'])) {
        $this->userId = $_SESSION['userId'];        
    } else 
        unset($this->userId);       
    }

    public function login($user) {
    if ($user != null) {        
        $_SESSION['userId'] = $user->id;
        $this->userId = $user->id;
    }
    }

     public function logout() {
    unset($_SESSION['userId']);
    unset($this->userId);   
    }    
}

$session = new Session();

?>

L'appel à la classe session est faite comme suit:

if ($session->isLoggedIn())
redirectToLocation("../public/index.php");
J'ai essayé votre code dans la même version de PHP (5.3.5) sur Windows server et il jette rien (!?)
Merci de nous donner le code complet, vous avez ajouté ... il n'est plus?
Juste pour snickers, essayez de déclarer la propriété publique ou statique et tester à nouveau. Pas de reproducy.
Il n' pas jetez un avis, probablement vous avez supprimé le problème lors de la coupe vers le bas le code d'un exemple.

OriginalL'auteur Mansiemans | 2011-04-05