我正在运行以下代码:
通知消失。
我不理解。在两种情况下都设置了 $var,为什么它会变成未定义属性?为什么需要使用 isset() 来避免这个通知?此外,为什么通知中使用作用域运算符 :: 引用 $var?我没有使用静态类,而是使用实例 foo。$foo->isVarSet() 应该访问已定义且非静态的 $var。
我已经为此工作了几个小时,并阅读了关于未定义属性通知的所有其他答案,但这个问题我就是不明白。请指教,StackOverFlow 大师们。
我的应用程序中的代码:
class Foo {
private $var = 0;
function isVarSet () {
return ($this->var != 0);
}
}
...
foo = new Foo();
在我的PHP(版本5.3.5)中,使用foo::$var会导致“未定义属性”的通知。
如果我只重写函数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");