如何跟踪同一用户(对象)的多个实例

How to track multiple instances of the same user (object)

提问人:Madara's Ghost 提问时间:11/26/2011 最后编辑:Madara's Ghost 更新时间:12/2/2011 访问量:142

问:

我正在用PHP编写一个IRC机器人,我想比大多数其他机器人更复杂一些。

我的应用程序中有以下类:

  1. Bot- 实际的机器人类,它处理机器人可以获得的所有功能和命令。
  2. Registry- 全局设置和变量,传递给任何功能类,这样我就不必在全局命名空间中乱扔变量。
  3. Channel- 定义通道对象 properties: ,其中 是通道名称,是对象数组。$name, $nicklist$name$nicklistUser
  4. User- 定义用户对象 properties: ,其中 是用户的地址,格式为 。$nickname, $fullAddress$fullAddressnick!user@host

然而,到目前为止,用户可能在多个渠道上,并且由于我不想拥有来自同一用户的多个对象(例如,如果用户更改了他的昵称,我将不得不更新多个元素,而不仅仅是一个)。

我该怎么做,我正在考虑在类的底部保留一个大型用户池,并将这些引用传递给通道,但我真的不知道该怎么做:PBot

谁能为我指出正确的方向?如果你愿意,我可以粘贴我当前的代码(它相当长,所以如果没有人需要它,我宁愿不这样做)。

谢谢。

PHP 对象 IRC

评论


答:

0赞 AlexTheo 11/26/2011 #1

您可以为您的用户添加频道 ID 列表,每次用户加入新频道时,您都会在列表中附加一个新的频道 ID,因此如果用户离开频道,您将从其列表中删除频道 ID。

评论

0赞 Madara's Ghost 11/26/2011
但关键是要跟踪频道上的用户,而不是用户频道,因为我想检查用户是否在特定频道上享有特权,并将他与该频道中的其他用户进行比较。在每个频道中创建一个用户列表,而不是在每个用户中创建一个频道列表更有意义。(虽然两者可以结合使用)
0赞 Madara's Ghost 11/26/2011
此外,它会导致同样的问题。2 个用户可以在同一个频道上,那么我必须将相同的对象提供给 2 个用户。
0赞 AlexTheo 11/26/2011
您将仅添加通道 ID,而不添加通道对象的实例。从要求来看,一个频道有很多用户,一个用户可以加入多个频道,用户也可以看到他加入的频道名称,因此用户有频道名称列表。
0赞 Madara's Ghost 11/26/2011
请注意,这不是一个 IRC 客户端,而是一个机器人。机器人应该跟踪其所在频道上的用户。用户仅作为对象携带意义,以便机器人可以判断用户是否在某个频道上,他是否是该频道上的操作人员,并且如果它在该频道上检测到他的问题,则可以禁止他进入该特定频道。为此,我不在乎用户在什么频道上,我只在乎用户在我的频道上。
0赞 Madara's Ghost 12/2/2011 #2

由于对象是需要进行跟踪的对象,因此在其上有一个对象数组,并将指向这些对象的指针(又名)传递给对象。BotUser$bot->users['name']Channel

这样,如果用户列表中已经找到该用户,则可以传递同一指针两次。