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!');