public static function backupStaticAttributes(array $blacklist) {
self::$staticAttributes = array();
$declaredClasses = get_declared_classes();
$declaredClassesNum = count($declaredClasses);
for ($i = $declaredClassesNum - 1; $i >= 0; $i--) {
if (strpos($declaredClasses[$i], 'PHPUnit') !== 0 && strpos($declaredClasses[$i], 'File_Iterator') !== 0 && strpos($declaredClasses[$i], 'PHP_CodeCoverage') !== 0 && strpos($declaredClasses[$i], 'PHP_Invoker') !== 0 && strpos($declaredClasses[$i], 'PHP_Timer') !== 0 && strpos($declaredClasses[$i], 'PHP_TokenStream') !== 0 && strpos($declaredClasses[$i], 'Symfony') !== 0 && strpos($declaredClasses[$i], 'Text_Template') !== 0 && !$declaredClasses[$i] instanceof PHPUnit_Framework_Test) {
$class = new ReflectionClass($declaredClasses[$i]);
if (!$class
->isUserDefined()) {
break;
}
$backup = array();
foreach ($class
->getProperties() as $attribute) {
if ($attribute
->isStatic()) {
$name = $attribute
->getName();
if (!isset($blacklist[$declaredClasses[$i]]) || !in_array($name, $blacklist[$declaredClasses[$i]])) {
$attribute
->setAccessible(TRUE);
$value = $attribute
->getValue();
if (!$value instanceof Closure) {
$backup[$name] = serialize($value);
}
}
}
}
if (!empty($backup)) {
self::$staticAttributes[$declaredClasses[$i]] = $backup;
}
}
}
}