- var_dump: documentation ( source)
<?php
/**
* @property stdClass $x
* @property stdClass $y
*/
class C {
private $buffer = array();
function __get($key) {
if (array_key_exists($key, $this->buffer)) {
return $this->buffer[$key];
}
$f = 'calc_' . $key;
return $this->buffer[$key] = $this->$f();
}
function calc_x() {print __METHOD__ . "\n";
$x = new stdClass;
$x->y = $this->__get('y');
return $x;
}
function calc_y() {print __METHOD__ . "\n";
$y = new stdClass;
// Set a stub to avoid infinite recursion.
$this->buffer['y'] = $y;
$y->x = $this->__get('x');
return $y;
}
}
$c = new C;
$x = $c->x;
$y = $c->y;
var_dump($x->y === $y, $y->x === $x);
print "\n";
$c = new C;
$y = $c->y;
$x = $c->x;
var_dump($x->y === $y, $y->x === $x);