我打电话给一个班:
$user = new user;
然后我定义了一个会话变量:
$_SESSION['user']= 'username';
在我的脚本中,如果我在其显示的某个函数中回显使用$_SESSION['user']
;
Catchable fatal error: Object of class user could not be converted to string in /home/username/public_html/cart-admin/include/classes/class.auth.php
答案 0 :(得分:1)
不,$ _SESSION可能永远不会与您的user
类的对象/实例发生冲突。
虽然您声明这是您的实际代码,但很难相信您在脚本中硬编码'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;
user
类中的魔术__toString()
method (see manual)来实现隐式转换。在__toString()
中,只需从user
对象中返回用户名。我会选择选项1,这更加重要,并且不会在会话中存储用户对象的序列化。
答案 1 :(得分:0)
您的脚本似乎将名为user
的对象保存到$ _SESSION var。这就是为什么你看不到username
字符串的原因,它可能会从脚本中被淹没。您必须使用其他关键字来存储用户名。