- 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.
function __construct($a) {
$this->a = $a;
}
public function __wakeup() {
$this->a = 42;
for ($i = 0; $i < 10000; $i++) {
$this->{'b' . $i} = 42;
}
}
}
function main() {
$obj = (object)["test" => 'foo']; // array (not a reference, but should be copied on write)
$a = new Obj($obj);
$b = new Obj($obj);
$variable = [$a, $b];
$serialized = serialize($variable);
printf("%s\n", $serialized);
$unserialized = unserialize($serialized);
echo "Called __unserialize\n";
for ($i = 0; $i < 10000; $i++) {
if ($unserialized[0]->{'b' . $i} !== 42) {
echo "Fail 0 b$i\n";
return;
}
if ($unserialized[1]->{'b' . $i} !== 42) {
echo "Fail 1 b$i\n";
return;
}
unset($unserialized[0]->{'b' . $i});
unset($unserialized[1]->{'b' . $i});
}
var_dump($unserialized);
}
main();