- var_dump: documentation ( source)
<?php
class SomethingBuilder
{
private $name;
private $super;
function __construct($name){
$this->name = $name;
}
function setSuper($super){
$this->super = $super;
}
function getSuper(){
return $this->super;
}
function copy($whatToCopy = null, $copyOfwhatToCopy = null){
if($this !== $whatToCopy){
$copy = new SomethingBuilder($this->name);
if($this->super)
$copy->setSuper($this->super->copy(
$whatToCopy ?? $this,
$copyOfwhatToCopy ?? $copy
));
return $copy;
}else{
return $copyOfwhatToCopy;
}
}
}
echo "No circular dependency:\n";
$a = new SomethingBuilder("A");
$b = new SomethingBuilder("B");
$a->setSuper($b);
echo "ORIGINAL:\n";
var_dump($a);
echo "COPY:\n";
var_dump($a->copy());
echo "\n----------\n\n";
echo "Self circular dependency:\n";
$a = new SomethingBuilder("A");
$a->setSuper($a);
echo "ORIGINAL:\n";
var_dump($a);
echo "COPY:\n";
var_dump($a->copy());
echo "\n----------\n\n";
echo "Two items circular dependency:\n";
$a = new SomethingBuilder("A");
$b = new SomethingBuilder("B");
$b->setSuper($a);
$a->setSuper($b);
echo "ORIGINAL:\n";
var_dump($a);
echo "COPY:\n";
var_dump($a->copy());
echo "\n----------\n\n";
echo "Three items circular dependency:\n";
$a = new SomethingBuilder("A");
$b = new SomethingBuilder("B");
$c = new SomethingBuilder("C");
$a->setSuper($c);
$b->setSuper($a);
$c->setSuper($b);
echo "ORIGINAL:\n";
var_dump($a);
echo "COPY:\n";
var_dump($a->copy());