Exemplo n.º 1
0
 /**
  *    Removes ('pops') all child contexts chained to the given context and itself,
  *    then makes the parent of the given context the new active context, so this
  *    comes with an implicit @see SimpleTest::getContext().
  *
  *    @param SimpleTestContext $context    The context to pop. It must have been
  *                                         produced before by either
  *                                         @see SimpleTest::getContext() or
  *                                         @see SimpleTest::pushContext().
  *    @return SimpleTestContext            The now activate context.
  */
 static function popContext($ctx)
 {
     // see if $ctx is indeed a parent of ours ...
     $child = self::$context;
     while ($child && $child !== $ctx) {
         $child = $child->getParent();
     }
     if (!$child) {
         return self::getContext();
     }
     // ... only when it is do we 'pop' the chain of children:
     self::$context = $ctx;
     // ... and see whether there's a valid parent to be had:
     if ($ctx = $ctx->getParent()) {
         self::$context = $ctx;
     }
     /*
      The GC should now recognize the child contexts as 'discarded'
      as the parent contexts don't reference the children, it's
      the other way around, so our 'self::$context' reference should
      have been the only thing that kept them alive till now.
     */
     return self::$context;
 }