<?php
class Super
{
public $child;
function setChild(Child $child){
echo "setting child to super\n";
$this->child = $child;
if($child->getSuper() !== $this)
$child->setSuper($this);
}
function getChild(){
return $this->child;
}
}
class Child
{
public $super;
function setSuper(Super $super){
echo "setting super to child\n";
$this->super = $super;
if($super->getChild() !== $this)
$this->super->setChild($this);
}
function getSuper(){
return $this->super;
}
}
$super = new Super;
$child = new Child;
$super->setChild($child);
var_dump($super);
$super = new Super;
$child = new Child;
$child->setSuper($super);
var_dump($super);
setting child to super
setting super to child
object(Super)#1 (1) {
["child"]=>
object(Child)#2 (1) {
["super"]=>
*RECURSION*
}
}
setting super to child
setting child to super
object(Super)#3 (1) {
["child"]=>
object(Child)#4 (1) {
["super"]=>
*RECURSION*
}
}
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
setting child to super
setting super to child
object(Super)#1 (1) {
["child"]=>
object(Child)#2 (1) {
["super"]=>
*RECURSION*
}
}
setting super to child
setting child to super
object(Super)#3 (1) {
["child"]=>
object(Child)#4 (1) {
["super"]=>
*RECURSION*
}
}