0

好的,我对 OOP 整体还是很陌生,但我现在已经创建了一些可行的类,并且我正在慢慢掌握 PHP 中 OOP 的各种概念。在我目前正在进行的一个项目中,用户可以注册、登录/注销和上传/删除/评论/评价图像。

目前,当用户登录时,我将他们的大部分信息(我从数据库中检索到的)放在$_SESSION超全局中。这包括他们的名字、用户名、user_id 等信息。

作为补充,我有一个名为的页面user.functions.php,其中包含许多与“用户”概念相关的杂项功能,例如权限检查、请求其他用户数据、检查成功登录、注册用户等。

我的问题是我将如何管理这个作为一个User班级?如果我理解正确,页面上调用的任何内容只存在于该页面上,所以我不必声明一个

new User();

在我需要执行与该用户相关的任务的每个页面上?无论如何,这如何有效?调用如下函数不是更简单:

changeAddress();

代替:

$user = new User();
$user->changeAddress();

user_id我当前存储在会话中的关键用户数据如何?我是否也会在一个类中迁移该数据并通过 getter 方法检索它?

基本上,我看不到用户对象的概念如何提高整体代码质量,如果用户(本质上是跨页面概念)与仅存在于单个文档范围内的对象相关联?

我在这里想念什么?

4

2 回答 2

0

您正在处理两个不同的概念:

  • 将用户相关的功能封装在一个类中。
  • http 协议的无状态特性会导致在请求 - 响应周期完成后丢失所有信息,但可能通过各种机制在请求之间保留的会话信息除外。

因此,无论如何,您必须重新创建对象或实际上任何变量的事实都会发生。创建某个类的对象应该不会花费太多。填充成员是最重要的。遵循非 OO 方法将导致填充单个变量而不是类的成员,而不会提高性能。

于 2013-08-25T07:03:33.767 回答
0

您可以在会话中存储一个 $user 对象,而不是将所有信息单独放在其中$_SESSION,这样您就可以从任何页面访问用户对象。

$_SESSION['user'] = new User();
$_SESSION['user']->changeAddress();
于 2013-08-25T06:30:13.870 回答