Заменить объект в SplObjectStorage

При подключении я не знаю, какой объект добавить в $this->clientList (который является SplObjectStorage объект), и только теперь будет после регистрации. Я мог бы добавить заполнитель StdClass и просто добавить к нему, однако, мне не нужен этот заполнитель. Я полагаю, я мог бы подождать, чтобы добавить контроллер после регистрации, но я всегда вижу, как они добавляются при подключении, и я обеспокоен, что для этого есть веская причина.

Как я могу заменить этот объект-заполнитель StdClass в SplObjectStorage, который связан с соединением, вместо того, чтобы просто добавить в него новый объект?

$server->on('connection', function ($conn) {
    $this->clientController->addClient($conn);
    $conn->on('data', function($data) use ($conn){
        $this->clientController->processData($conn,$data);
    });
});
class ClientCollections
{
    public function __construct() {
        $this->clientList = new \SplObjectStorage();
    }

    public function addClient($connStream) {
        $this->clientList->attach($connStream, new \StdClass);
     }

    public function processData($connStream, $data) {
        if(isset($this->clientList[$this->connStream]->Client)) $this->clientList[$this->connStream]->Client->execute($data);
        elseif($controller=authenticateLogon($data)) $this->clientList[$this->connStream]->Client=$controller;  //Controller type based on username/password
    }
}

0 ответов

Другие вопросы по тегам