This is a naive but functional Pair data structure implemented  with only xDict:<br>
 
<?php
 
highlight_string('
 
<?php
 
require_once(\'./../xdict.class.php\');
 
class Pair{
 
    private $xdict=null;
 
    public function __construct($key,$value){    
 
    $this->xdict=xdict(0,\'\',false,false,2);
 
    $this->xdict[\'key\']=$key;
 
    $this->xdict[\'value\']=$value;        
 
    }
 
 
    public function copy(){
 
        return clone($this);
 
    }
 
    public function isEmpty (){
 
        return $this->xdict->isEmpty();
 
    }
 
 
    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 toArray(){
 
        return $this->xdict->toArray();
 
    }
 
    
 
    public function __debugInfo(){
 
        return $this->xdict->container;
 
    }
 
 
    public function __get($property){
 
        if($this->xdict->offsetExists($property)) return $this->xdict->offsetGet($property);
 
    }
 
 
    public function __set($property,$value){
 
        if($property===\'key\'){
 
            $this->xdict->offsetSet($property,$value);
 
        }elseif($property===\'value\'){
 
            $this->xdict->offsetSet($property,$value);
 
        }else{
 
            return;
 
        }
 
    }
 
 
    public  function __clone() {    
 
        $this->xdict = clone ($this->xdict);
 
    }
 
 
}
 
 
 
echo \'<pre>\';
 
$a = new Pair("a", 1);
 
$b = $a->copy();
 
 
$b->key = "u";
 
 
var_dump($a);
 
var_dump($b);
 
?>');
 
 
 
require_once('./../xdict.class.php');
 
class Pair{
 
    private $xdict=null;
 
    public function __construct($key,$value){    
 
    $this->xdict=xdict(0,'',false,false,2);
 
    $this->xdict['key']=$key;
 
    $this->xdict['value']=$value;        
 
    }
 
 
    public function copy(){
 
        return clone($this);
 
    }
 
    public function isEmpty (){
 
        return $this->xdict->isEmpty();
 
    }
 
 
    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 toArray(){
 
        return $this->xdict->toArray();
 
    }
 
    
 
    public function __debugInfo(){
 
        return $this->xdict->container;
 
    }
 
 
    public function __get($property){
 
        if($this->xdict->offsetExists($property)) return $this->xdict->offsetGet($property);
 
    }
 
 
    public function __set($property,$value){
 
        if($property==='key'){
 
            $this->xdict->offsetSet($property,$value);
 
        }elseif($property==='value'){
 
            $this->xdict->offsetSet($property,$value);
 
        }else{
 
            return;
 
        }
 
    }
 
 
    public  function __clone() {    
 
        $this->xdict = clone ($this->xdict);
 
    }
 
 
}
 
 
 
echo '<pre>';
 
$a = new Pair("a", 1);
 
$b = $a->copy();
 
 
$b->key = "u";
 
 
var_dump($a);
 
var_dump($b);
 
 |