<?php
declare(ticks=1);
function tick() {
global $ticks;
if ($ticks) {
$tick = array_shift($ticks);
$tick();
}
}
register_tick_function('tick');
class A {
protected $b = ['d' => 321];
function & __get($name) {
echo "And now, __get is running...\n";
$GLOBALS['ticks'][] = function () {
echo "THIS IS WHERE WE VALIDATE CHANGES TO THE ARRAY!\n";
};
return $this->{$name};
}
}
eval('
$a = new A();
$a->b["c"] = 123;
var_dump($a->b);
');
And now, __get is running...
THIS IS WHERE WE VALIDATE CHANGES TO THE ARRAY!
And now, __get is running...
THIS IS WHERE WE VALIDATE CHANGES TO THE ARRAY!
array(2) {
["d"]=>
int(321)
["c"]=>
int(123)
}
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
And now, __get is running...
THIS IS WHERE WE VALIDATE CHANGES TO THE ARRAY!
And now, __get is running...
THIS IS WHERE WE VALIDATE CHANGES TO THE ARRAY!
array(2) {
["d"]=>
int(321)
["c"]=>
int(123)
}