From ab3a44b33031d86c74cc8f07c9d904d8d20c7da9 Mon Sep 17 00:00:00 2001 From: Bruce Wells Date: Tue, 19 May 2020 22:20:56 -0400 Subject: Private members --- src/NXP/MathExecutor.php | 94 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 90 insertions(+), 4 deletions(-) diff --git a/src/NXP/MathExecutor.php b/src/NXP/MathExecutor.php index 53d8dfd..0b7e9db 100644 --- a/src/NXP/MathExecutor.php +++ b/src/NXP/MathExecutor.php @@ -15,6 +15,7 @@ use NXP\Classes\Calculator; use NXP\Classes\CustomFunction; use NXP\Classes\Operator; use NXP\Classes\Tokenizer; +use NXP\MathExecutorException; use NXP\Exception\DivisionByZeroException; use ReflectionException; @@ -29,17 +30,17 @@ class MathExecutor * * @var array */ - public $variables = []; + private $variables = []; /** * @var Operator[] */ - public $operators = []; + private $operators = []; /** * @var CustomFunction[] */ - public $functions = []; + private $functions = []; /** * @var array @@ -61,7 +62,7 @@ class MathExecutor protected function addDefaults() : void { foreach ($this->defaultOperators() as $name => $operator) { - list($callable, $priority, $isRightAssoc) = $operator; + [$callable, $priority, $isRightAssoc] = $operator; $this->addOperator(new Operator($name, $isRightAssoc, $priority, $callable)); } foreach ($this->defaultFunctions() as $name => $callable) { @@ -382,6 +383,91 @@ class MathExecutor ]; } + /** + * Get all vars + * + * @return array + */ + public function getVars() : array + { + return $this->variables; + } + + /** + * Get a specific var + * + * @param string $variable + * @return integer|float + * @throws UnknownVariableException + */ + public function getVar(string $variable) + { + if (!isset($this->variables[$variable])) { + throw new UnknownVariableException("Variable ({$variable}) not set"); + } + return $this->variables[$variable]; + } + + /** + * Add variable to executor + * + * @param string $variable + * @param integer|float $value + * @return MathExecutor + * @throws MathExecutorException + */ + public function setVar(string $variable, $value) : self + { + if (!is_numeric($value)) { + throw new MathExecutorException("Variable ({$variable}) value must be a number ({$value}) type ({gettype($value)})"); + } + $this->variables[$variable] = $value; + return $this; + } + + /** + * Remove variable from executor + * + * @param string $variable + * @return MathExecutor + */ + public function removeVar(string $variable) : self + { + unset ($this->variables[$variable]); + return $this; + } + + /** + * Remove all variables + * @return MathExecutor + */ + public function removeVars() : self + { + $this->variables = []; + return $this; + } + + /** + * Get all registered operators to executor + * + * @return array of operator class names + */ + public function getOperators() + { + return $this->tokenFactory->getOperators(); + } + + /** + * Get all registered functions + * + * @return array containing callback and places indexed by + * function name + */ + public function getFunctions() : array + { + return $this->tokenFactory->getFunctions(); + } + public function __clone() { $this->addDefaults(); -- cgit v1.2.3