- array_shift: documentation ( source)
- register_tick_function: documentation ( source)
<?php
declare(ticks=1);
function tick() {
global $ticks;
if ($ticks) {
if ($ticks[0][0] > 1) {
$ticks[0][0]--;
} else {
$tick = array_shift($ticks);
$tick[1]();
}
}
}
register_tick_function('tick');
class A {
protected $b = ['d' => 321];
function & __get($name) {
$current = $this->{$name};
echo "And now, __get is running...\n";
$GLOBALS['ticks'][] = [2, function () use ($current, $name) {
if ($current !== $this->{$name}) {
echo "Array WAS changed!!!\n";
} else {
echo "Array not changed.\n";
}
}];
return $this->{$name};
}
}
eval('
$a = new A();
$a->b["c"] = 123;
var_dump($a->b);
');