You are here

class Restorer in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/sebastian/global-state/src/Restorer.php \SebastianBergmann\GlobalState\Restorer

Restorer of snapshots of global state.

@author Sebastian Bergmann <sebastian@phpunit.de> @copyright 2001-2014 Sebastian Bergmann <sebastian@phpunit.de> @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License @link http://www.github.com/sebastianbergmann/global-state

Hierarchy

  • class \SebastianBergmann\GlobalState\Restorer

Expanded class hierarchy of Restorer

1 file declares its use of Restorer
TestCase.php in vendor/phpunit/phpunit/src/Framework/TestCase.php

File

vendor/sebastian/global-state/src/Restorer.php, line 55

Namespace

SebastianBergmann\GlobalState
View source
class Restorer {

  /**
   * Deletes function definitions that are not defined in a snapshot.
   *
   * @param  Snapshot $snapshot
   * @throws RuntimeException when the uopz_delete() function is not available
   * @see    https://github.com/krakjoe/uopz
   */
  public function restoreFunctions(Snapshot $snapshot) {
    if (!function_exists('uopz_delete')) {
      throw new RuntimeException('The uopz_delete() function is required for this operation');
    }
    $functions = get_defined_functions();
    foreach (array_diff($functions['user'], $snapshot
      ->functions()) as $function) {
      uopz_delete($function);
    }
  }

  /**
   * Restores all global and super-global variables from a snapshot.
   *
   * @param Snapshot $snapshot
   */
  public function restoreGlobalVariables(Snapshot $snapshot) {
    $superGlobalArrays = $snapshot
      ->superGlobalArrays();
    foreach ($superGlobalArrays as $superGlobalArray) {
      $this
        ->restoreSuperGlobalArray($snapshot, $superGlobalArray);
    }
    $globalVariables = $snapshot
      ->globalVariables();
    foreach (array_keys($GLOBALS) as $key) {
      if ($key != 'GLOBALS' && !in_array($key, $superGlobalArrays) && !$snapshot
        ->blacklist()
        ->isGlobalVariableBlacklisted($key)) {
        if (isset($globalVariables[$key])) {
          $GLOBALS[$key] = $globalVariables[$key];
        }
        else {
          unset($GLOBALS[$key]);
        }
      }
    }
  }

  /**
   * Restores all static attributes in user-defined classes from this snapshot.
   *
   * @param Snapshot $snapshot
   */
  public function restoreStaticAttributes(Snapshot $snapshot) {
    foreach ($snapshot
      ->staticAttributes() as $className => $staticAttributes) {
      foreach ($staticAttributes as $name => $value) {
        $reflector = new ReflectionProperty($className, $name);
        $reflector
          ->setAccessible(true);
        $reflector
          ->setValue($value);
      }
    }
  }

  /**
   * Restores a super-global variable array from this snapshot.
   *
   * @param Snapshot $snapshot
   * @param $superGlobalArray
   */
  private function restoreSuperGlobalArray(Snapshot $snapshot, $superGlobalArray) {
    $superGlobalVariables = $snapshot
      ->superGlobalVariables();
    if (isset($GLOBALS[$superGlobalArray]) && is_array($GLOBALS[$superGlobalArray]) && isset($superGlobalVariables[$superGlobalArray])) {
      $keys = array_keys(array_merge($GLOBALS[$superGlobalArray], $superGlobalVariables[$superGlobalArray]));
      foreach ($keys as $key) {
        if (isset($superGlobalVariables[$superGlobalArray][$key])) {
          $GLOBALS[$superGlobalArray][$key] = $superGlobalVariables[$superGlobalArray][$key];
        }
        else {
          unset($GLOBALS[$superGlobalArray][$key]);
        }
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Restorer::restoreFunctions public function Deletes function definitions that are not defined in a snapshot.
Restorer::restoreGlobalVariables public function Restores all global and super-global variables from a snapshot.
Restorer::restoreStaticAttributes public function Restores all static attributes in user-defined classes from this snapshot.
Restorer::restoreSuperGlobalArray private function Restores a super-global variable array from this snapshot.