public function isFull() { return $this->numItems == $this->maxSize; } public function enqueue($value) { if (!$this->isFull()) { parent::enqueue($value); $this->numItems++; } } public function dequeue() { $value = parent::dequeue(); $this->numItems--; if ($this->numItems <= 0) { $this->maxSize--; $this->numItems = 0; // echo 'Queue shrank.<br>'; } return $value; } } $queue = new ShrinkingQueue(3); $producer = new Producer(); $producer->setQueue($queue); $consumer = new Consumer(); $consumer->setQueue($queue); $consumer->setProducer($producer); $producer->setConsumer($consumer); $producer->fill()->send('GO!');