$ _SESSION []与定义的类冲突吗?

时间:2012-06-16 16:49:13

标签: php

我打电话给一个班:

$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

2 个答案:

答案 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,这就是您想要的。

对此有两种可能的解决方法:

  1. 在会话中存储用户名属性(而不是对象)。例如:$_SESSION['user'] = $user->getName();$_SESSION['user'] = $user->name;
  2. 使用user类中的魔术__toString() method (see manual)来实现隐式转换。在__toString()中,只需从user对象中返回用户名。
  3. 我会选择选项1,这更加重要,并且不会在会话中存储用户对象的序列化。

答案 1 :(得分:0)

您的脚本似乎将名为user的对象保存到$ _SESSION var。这就是为什么你看不到username字符串的原因,它可能会从脚本中被淹没。您必须使用其他关键字来存储用户名。