Я использую следующий код:
class Foo {
private $var = 0;
function isVarSet () {
return ($this->var != 0);
}
}
...
foo = new Foo();
приводит к уведомлению "неопределенное свойство": foo :: $ var в моем PHP (версия 5.3.5).
если я переписываю только функцию isVarSet ():
function isVarSet() {
if (isset($this->var))
return ($this->var != 0);
return false;
}
уведомление исчезает.
Это я не понимаю.$ var устанавливается в обоих случаях, почему это будет неопределенное свойство?Почему мне нужно использовать isset () для предотвращения этого уведомления?Кроме того, почему уведомление ссылается на $ var с оператором области ::?Я не использую статический класс, я использую экземпляр foo.$ foo-> isVarSet () должен получить доступ к переменной $ var, которая определена и не является статичной.
Я работаю над этим часами и читаю все остальные ответы в уведомлении о неопределенном свойстве, но этоодин я просто не понимаю.Пожалуйста, просветите меня, мастера StackOverFlow.
код в моем приложении:
<?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();
?>
Вызов в классе сеанса сделан так:
if ($session->isLoggedIn())
redirectToLocation("../public/index.php");