phabel/src/VariableContext.php

94 lines
1.8 KiB
PHP

<?php
namespace Phabel;
/**
* Represent variables currently in scope.
*
* @author Daniil Gentili <daniil@daniil.it>
* @license MIT
*/
class VariableContext
{
/**
* Variable list.
*
* @var array<string, true>
*/
private array $variables;
/**
* Constructor.
*
* @param array<string, true> $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<string, true> $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;
}
}