This is a naive but functional Queue data structure implemented  with only xDict:<br>
 
<?php
 
highlight_string('
 
<?php
 
require_once(\'./../xdict.class.php\');
 
class Queue implements Iterator,Countable ,JsonSerializable{
 
 
    private $xdict=null;
 
 
    public function __construct($mixed=[]){
 
        if(is_array($mixed)){
 
            $this->xdict=xdict(0);
 
            $this->xdict->fill_with($mixed);
 
        }elseif(is_object($mixed)&&key_exists(\'Traversable\',class_implements($mixed))){
 
            $this->xdict=xdict(0);
 
            $this->xdict->fill_with(iterator_to_array($mixed));
 
        }else{
 
            throw new LogicException(\'Argument $mixed must be of type array or must implements the Traversable Interface\'); 
 
        }
 
    }
 
    
 
    function rewind() {
 
        return $this->xdict->rewind();
 
    }
 
 
    function current() {
 
         return $this->xdict->current();
 
    }
 
 
    function key() {
 
        return $this->xdict->key();
 
    }
 
 
    function next() {
 
        $x=$this->xdict->next();
 
        $this->xdict->shift();
 
        return $x;
 
    }
 
 
    function valid() {
 
         return $this->xdict->valid();
 
    }
 
    public function clear (){
 
        return $this->xdict->clear();
 
    }
 
    public function count(){
 
            return $this->xdict->count();
 
    }
 
    
 
    public function copy (){
 
        return clone($this);
 
    }
 
    public function isEmpty (){
 
        return $this->xdict->isEmpty();
 
    }
 
    public function peek (){
 
        return $this->xdict->first();
 
    }
 
    public function pop (){
 
        if($this->isEmpty()) throw new UnderflowException(\'The queue is already empty\');
 
        return $this->xdict->shift(true);
 
    }
 
    public function push (...$values ){
 
        return $this->xdict->push(...$values);
 
        
 
    }
 
    public function toArray (){
 
        return $this->xdict->toArray();
 
    }
 
 
    public function __debugInfo(){
 
        return $this->xdict->container;
 
    }    
 
    
 
    public function jsonSerialize() {
 
        $anonymous=function(&$v){
 
            if(is_object($v)) $v=serialize($v);
 
            if(is_resource($v)) $v=get_resource_type($v).\'_#\'.@intval($v);
 
        };
 
        $x=$this->xdict->container;
 
        array_walk_recursive($x,$anonymous);
 
        return $x;
 
    }
 
    
 
    
 
    public  function __clone() {    
 
        $this->xdict = clone ($this->xdict);
 
    }
 
}
 
    
 
echo \'<pre>\';    
 
$queue = new Queue();
 
var_dump($queue);
 
 
 
$queue = new Queue([1, 2, 3]);
 
var_dump($queue->isEmpty(),$queue->peek(),$queue->pop(),$queue);
 
    $queue->push(5,5,6,7);    
 
 
 
    foreach($queue as $v){
 
        echo $v.\'<br>\';
 
    }
 
    var_dump($queue);
 
?>
 
');    
 
 
require_once('./../xdict.class.php');
 
 
class Queue implements Iterator,Countable ,JsonSerializable{
 
 
    private $xdict=null;
 
 
    public function __construct($mixed=[]){
 
        if(is_array($mixed)){
 
            $this->xdict=xdict(0);
 
            $this->xdict->fill_with($mixed);
 
        }elseif(is_object($mixed)&&key_exists('Traversable',class_implements($mixed))){
 
            $this->xdict=xdict(0);
 
            $this->xdict->fill_with(iterator_to_array($mixed));
 
        }else{
 
            throw new LogicException('Argument $mixed must be of type array or must implements the Traversable Interface'); 
 
        }
 
    }
 
    
 
    function rewind() {
 
        return $this->xdict->rewind();
 
    }
 
 
    function current() {
 
         return $this->xdict->current();
 
    }
 
 
    function key() {
 
        return $this->xdict->key();
 
    }
 
 
    function next() {
 
        $x=$this->xdict->next();
 
        $this->xdict->shift();
 
        return $x;
 
    }
 
 
    function valid() {
 
         return $this->xdict->valid();
 
    }
 
    public function clear (){
 
        return $this->xdict->clear();
 
    }
 
    public function count(){
 
            return $this->xdict->count();
 
    }
 
    
 
    public function copy (){
 
        return clone($this);
 
    }
 
    public function isEmpty (){
 
        return $this->xdict->isEmpty();
 
    }
 
    public function peek (){
 
        return $this->xdict->first();
 
    }
 
    public function pop (){
 
        if($this->isEmpty()) throw new UnderflowException('The queue is already empty');
 
        return $this->xdict->shift(true);
 
    }
 
    public function push (...$values ){
 
        return $this->xdict->push(...$values);
 
        
 
    }
 
    public function toArray (){
 
        return $this->xdict->toArray();
 
    }
 
 
    public function __debugInfo(){
 
        return $this->xdict->container;
 
    }    
 
    
 
    public function jsonSerialize() {
 
        $anonymous=function(&$v){
 
            if(is_object($v)) $v=serialize($v);
 
            if(is_resource($v)) $v=get_resource_type($v).'_#'.@intval($v);
 
        };
 
        $x=$this->xdict->container;
 
        array_walk_recursive($x,$anonymous);
 
        return $x;
 
    }
 
    
 
    
 
    public  function __clone() {    
 
        $this->xdict = clone ($this->xdict);
 
    }
 
}
 
    
 
echo '<pre>';    
 
$queue = new Queue();
 
var_dump($queue);
 
 
 
$queue = new Queue([1, 2, 3]);
 
var_dump($queue->isEmpty(),$queue->peek(),$queue->pop(),$queue);
 
    $queue->push(5,5,6,7);    
 
    
 
    foreach($queue as $v){
 
        echo $v.'<br>';
 
    }
 
    
 
    var_dump($queue);
 
    ?>
 
 |