user
不,$_SESSION 可能永远不会与您的类的对象/实例发生冲突。
尽管您声明这是您的实际代码,但很难相信您'username'
在脚本中进行了硬编码。;-)
假设您的实际代码如下所示:
$user = new user;
// ... many lines between ...
$_SESSION['user'] = $user;
// ... more lines between ...
echo $_SESSION['user'];
...那么错误很容易解释。当您执行此操作时, echo $_SESSION['user']
PHP 会尝试将此变量中引用的对象(类的对象user
)隐式转换为字符串,以便可以打印。
要检查我是否正确,您可以在您之前插入此代码echo
:
echo "session variable 'user' is of type: ", gettype($_SESSION['user']);
你要么看到.. is of type: user
我所期望的,要么你会看到.. is of type: string
,这是你想要的。
有两种可能的解决方法:
- 要么将用户名属性(而不是对象)存储在会话中。例如:
$_SESSION['user'] = $user->getName();
或$_SESSION['user'] = $user->name;
- 在你的类中使用魔法
__toString()
方法(见手册)user
使这种隐式转换成为可能。在__toString()
中,只需从user
对象内部返回用户名。
我会选择选项 1,这更重要,并且不会在会话中存储用户对象的序列化。