0

我叫了一堂课:

$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
4

2 回答 2

1

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,这是你想要的。

有两种可能的解决方法:

  1. 要么将用户名属性(而不是对象)存储在会话中。例如:$_SESSION['user'] = $user->getName();$_SESSION['user'] = $user->name;
  2. 在你的类中使用魔法__toString()方法(见手册)user使这种隐式转换成为可能。在__toString()中,只需从user对象内部返回用户名。

我会选择选项 1,这更重要,并且不会在会话中存储用户对象的序列化。

于 2012-06-16T18:06:51.593 回答
0

您的脚本似乎保存了一个名为user$_SESSION var 的对象。这就是您看不到username字符串的原因,它可能会被脚本覆盖。您必须使用另一个关键字来存储用户名。

于 2012-06-16T16:52:04.467 回答