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