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");
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
Vous devez vous connecter pour publier un commentaire.
(après l'ensemble de la modifier).
Que pensez-vous de cette ligne (dans
setUserId
):Vous pourriez vouloir mettre à 0, comme le précédent (que vous pouvez reconnaître comme non connecté:
Ou:
Faire votre choix.
L'idée est de laisser la question de l'être, alors que d'autres peuvent le trouver & peut-être la réponse à leur avantage (même si ici c'est un peu localisée répondre à la théorie est toujours valable).
Ou vous pouvez décider de ne pas utiliser unset et simple il suffit de le mettre à 0 ou null
c'est exactement ce que j'ai dit, mais l'avis de ceux qui sont loin de la même chose. Un null-variable n'est pas la même chose qu'un non-variable existante.
OriginalL'auteur Wrikken
php 5.3.5/windows
de sortie est:
pour
$var=1
, la sortie est de:De sorte qu'il fonctionne parfaitement ici.
OriginalL'auteur Wh1T3h4Ck5
Je pense que c'est parce que vous n'avez pas initialiser ta variable dans ton premier exemple. Vous devez d'abord initialiser le var dans une méthode qui est appelée. Alors seulement, il est initialisé.
Espérons que cela vous aide.
Il est initialisée par qui, cette réponse n'est pas la réponse que vous cherchez.
OriginalL'auteur sanders