<?php
$a = (object) array();
$b = (object) array();
function object_handle($obj)
{
static $mask = 0, $offset;
if (!$mask) {
if (defined('HHVM_VERSION')) {
$offset = 24;
} else {
$offset = 8;
}
$o = (object) array();
$mask = hexdec(substr(spl_object_hash($o), $offset, 8));
// check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below
foreach (debug_backtrace(PHP_VERSION_ID >= 50400 ? DEBUG_BACKTRACE_IGNORE_ARGS : false) as $frame) {
if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0]
&& in_array($frame['function'], array('ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush'))
) {
$frame['line'] = 0;
break;
}
}
if (!empty($frame['line'])) {
ob_start();
debug_zval_dump($o);
$mask ^= substr(ob_get_clean(), 17);
}
}
return hexdec(substr(spl_object_hash($obj), $offset, 8)) ^ $mask;
}
//ob_start('abc');
//ob_end_flush();
$o = array();
echo object_handle($o[]=(object) array()), "\n";
echo object_handle($o[]=(object) array()), "\n";
echo object_handle($o[]=(object) array()), "\n";
echo object_handle($o[]=(object) array()), "\n";
echo object_handle($o[]=(object) array()), "\n";
echo object_handle($o[]=(object) array()), "\n";
echo object_handle($o[]=(object) array()), "\n";
echo object_handle($b), "\n";
echo object_handle($a), "\n";
function abc()
{
global $a;
isset($a) or $a = (object) array();
return object_handle($a);
}
ob_start('abc');
preferences:
45.66 ms | 402 KiB | 5 Q