returnValue; case '_e': if (!isset($this->lastException)) { throw new \InvalidArgumentException('Unknown variable: $' . $name); } return $this->lastException; default: if (!array_key_exists($name, $this->scopeVariables)) { throw new \InvalidArgumentException('Unknown variable: $' . $name); } return $this->scopeVariables[$name]; } } /** * Get all defined variables. * * @return array */ public function getAll() { $vars = $this->scopeVariables; $vars['_'] = $this->returnValue; if (isset($this->lastException)) { $vars['_e'] = $this->lastException; } return $vars; } /** * Set all scope variables. * * This method does *not* set the magic $_ and $_e variables. * * @param array $vars */ public function setAll(array $vars) { foreach (self::$specialVars as $key) { unset($vars[$key]); } $this->scopeVariables = $vars; } /** * Set the most recent return value. * * @param mixed $value */ public function setReturnValue($value) { $this->returnValue = $value; } /** * Get the most recent return value. * * @return mixed */ public function getReturnValue() { return $this->returnValue; } /** * Set the most recent Exception. * * @param \Exception $e */ public function setLastException(\Exception $e) { $this->lastException = $e; } /** * Get the most recent Exception. * * @throws InvalidArgumentException If no Exception has been caught. * * @return null|Exception */ public function getLastException() { if (!isset($this->lastException)) { throw new \InvalidArgumentException('No most-recent exception'); } return $this->lastException; } }