- var_dump: documentation ( source)
- unserialize: documentation ( source)
- serialize: documentation ( source)
- error_reporting: documentation ( source)
- printf: documentation ( source)
<?php
error_reporting(E_ALL|E_STRICT);
class Obj {
// Testing $this->a being a dynamic property.
public function __construct($a) {
$this->a = $a;
}
public function __wakeup() {
for ($i = 0; $i < 10000; $i++) {
$this->{'b' . $i} = 42;
}
}
}
function main() {
$obj = (object)["test" => 'foo']; // object used twice as properties of other objects.
$variable = [new Obj($obj), new Obj($obj)];
$serialized = serialize($variable);
printf("%s\n", $serialized);
$unserialized = unserialize($serialized);
echo "Called __unserialize\n";
for ($a = 0; $a < 2; $a++) {
for ($i = 0; $i < 10000; $i++) {
if ($unserialized[$a]->{'b' . $i} !== 42) {
echo "Fail $a b$i\n";
return;
}
unset($unserialized[$a]->{'b' . $i});
}
}
var_dump($unserialized);
}
main();