* @license MIT */ class VariableContext { /** * Variable list. * * @var array */ private array $variables; /** * Constructor. * * @param array $variables Initial variables */ public function __construct(array $variables = []) { $this->variables = $variables; } /** * Add variable. * * @param string $var Variable * * @return void */ public function addVar(string $var): void { $this->variables[$var] = true; } /** * Add variables. * * @param array $vars Variables * * @return void */ public function addVars(array $vars): void { $this->variables += $vars; } /** * Remove variable. * * @param string $var Variable name * * @return void */ public function removeVar(string $var): void { unset($this->variables[$var]); } /** * Check if variable is present. * * @param string $var * @return boolean */ public function hasVar(string $var): bool { return isset($this->variables[$var]); } /** * Get unused variable name. * * @return string */ public function getVar(): string { do { $var = 'phabel'.\bin2hex(\random_bytes(8)); } while (isset($this->variables[$var])); $this->variables[$var] = true; return $var; } /** * Get all variables currently defined. * * @return array */ public function getVars(): array { return $this->variables; } }