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


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

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

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

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

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

我该怎么做呢?我在考虑在Bot类的基础上持有一个大用户池,并将这些引用传递给通道,但我真的不知道如何做到这一点:p

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

谢谢。

你可以添加一个频道id的列表给你的用户,每次用户加入到一个新的频道,你会添加一个新的频道id的列表,所以如果一个用户离开一个频道,你会从他的列表中删除频道id

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

这样,同一个指针可以传递两次,以防用户已经在用户列表中找到。