如何跟踪同一用户(对象)的多个实例
Posted
技术标签:
【中文标题】如何跟踪同一用户(对象)的多个实例【英文标题】:How to track multiple instances of the same user (object) 【发布时间】:2011-11-26 12:40:29 【问题描述】:我正在用 php 编写一个 IRC 机器人,我想让它比大多数其他机器人更复杂一些。
我的应用程序中有以下类:
Bot
- 实际的机器人类,它处理机器人可以获得的所有功能和命令。
Registry
- 全局设置和变量,传递给任何功能类,这样我就不必在全局命名空间中乱扔变量了。
Channel
- 定义通道对象,属性:$name, $nicklist
,其中$name
是通道名称,$nicklist
是User
对象的数组。
User
- 定义用户对象,属性:$nickname, $fullAddress
,其中$fullAddress
是nick!user@host
形式的用户地址。
到目前为止一切顺利,但是,一个用户可能在多个频道上,并且由于我不想拥有来自同一用户的多个对象(例如,就好像一个用户更改了他的昵称,我将更新多个元素,而不仅仅是一个)。
我会怎么做,我想在Bot
类的基础上持有一个大用户池,并将这些引用传递给频道,但我也不知道该怎么做: P
谁能指出我正确的方向?如果你愿意,我可以粘贴我当前的代码(它很长,所以如果没有人需要,我宁愿不这样做)。
谢谢。
【问题讨论】:
【参考方案1】:您可以向您的用户添加频道 ID 列表,每次用户加入新频道时,您都会在列表中附加一个新频道 ID,因此如果用户离开频道,您将从他的列表中删除频道 ID .
【讨论】:
但重点是跟踪频道上的用户,而不是用户上的频道,因为我想检查例如,用户是否在特定频道上享有特权,并将他与其他频道进行比较该频道的用户。在每个频道中创建用户列表而不是在每个用户中创建频道列表更有意义。 (虽然两者可以结合) 另外,它会导致同样的问题。 2 个用户可以在同一个频道上,那么我必须将同一个对象给 2 个用户。 您将只添加频道 ID,而不是频道对象的实例。从reqs一个频道有很多用户,一个用户可以加入多个频道,用户也可以看到他加入的频道名称,因此用户有频道名称列表。 请注意,这不是 IRC 客户端,而是机器人。该机器人应该跟踪其所在频道的用户。用户仅将含义作为对象携带,因此机器人可以判断用户是否在频道上,他是否是该频道上的操作员,并且如果在该频道上检测到他的问题,则能够禁止他进入该特定频道。为此,我不在乎用户在什么频道上,我只在乎用户在我的频道上。【参考方案2】:由于Bot
对象是需要进行跟踪的对象,因此有一个User
对象数组,并将指向这些对象(又名$bot->users['name']
)的指针传递给Channel
对象。
这样,相同的指针可以被传递两次,以防用户已经在用户列表中找到。
【讨论】:
以上是关于如何跟踪同一用户(对象)的多个实例的主要内容,如果未能解决你的问题,请参考以下文章