无法将类型为\uuuPHP\u不完整\u类的对象用作数组
我有以下代码:无法将类型为\uuuPHP\u不完整\u类的对象用作数组,php,Php,我有以下代码: class user{ public function __construct(){ } } $user = new user; $id = $_SESSION['user']; 这将导致错误“无法使用类型为uuu PHP_complete_Class的对象作为数组”。 将$\u会话['user']更改为$\u会话['u user']可更正此问题 我只是在我的开发环境中体验到这一点。我的实时环境不会产生此错误 我的问题:是否存在将会话键“user”视为类对象的配
class user{
public function __construct(){
}
}
$user = new user;
$id = $_SESSION['user'];
这将导致错误“无法使用类型为uuu PHP_complete_Class的对象作为数组”。
将$\u会话['user']
更改为$\u会话['u user']
可更正此问题
我只是在我的开发环境中体验到这一点。我的实时环境不会产生此错误
我的问题:是否存在将会话键“user”视为类对象的配置设置?当我遇到此问题时,是由于调用了会话_start();加载类定义之后。需要首先调用它。我猜您启用了register\u globals,这意味着全局变量
$user
和会话变量$\u session['user']
是同一件事,因此当您使用新对象覆盖会话变量$user=new user
时
当您调用session\u start
时,PHP取消序列化存储在会话中的所有内容,如果尚未定义对象的类,则PHP无法取消序列化对象。当您尝试执行类似的操作时,PHP会将其放入一个名为\uuuphp\ucomplete\uclass的特殊无用类中
这将解决问题
这将解决问题$_会话['user']是一个对象,而不是数组,并且您无法使用数组表示法(即:['index'])*访问对象。如果'index'是一个公共属性,您可以使用->index访问它,否则您需要向类中添加一个获取'index'的方法,并使用->get_index()调用该方法 如果要在会话中存储类的实例,则需要先将其序列化。可以在PHP中使用标准serialize()函数。要检索信息,请使用unserialize()函数
class User()
{
private $id;
// other
public function __construct()
{
//
}
}
// Set the session
$newUser = new User();
$_SESSION['mySession'] = serialize($newUser);
// Retrieve session info
$myUser = unserialize($_SESSION['mySession']);
事实上,有更多的事情会导致这个问题:
梅亚克,我现在正遵循你的思路。它似乎与用户类没有任何关系。我稍后会回来报告,谢谢你的帮助。Rick,会话['user']和对象$user是不同的。我的问题是为什么会话['user']被视为类user的新实例?我不相信如果序列化实例,会发生这种情况