diff options
Diffstat (limited to 'src/NXP/MathExecutor.php')
-rw-r--r-- | src/NXP/MathExecutor.php | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/src/NXP/MathExecutor.php b/src/NXP/MathExecutor.php index 5584d1a..a113275 100644 --- a/src/NXP/MathExecutor.php +++ b/src/NXP/MathExecutor.php @@ -65,7 +65,7 @@ class MathExecutor * Set default operands and functions * @throws ReflectionException */ - protected function addDefaults() : void + protected function addDefaults(): void { foreach ($this->defaultOperators() as $name => $operator) { [$callable, $priority, $isRightAssoc] = $operator; @@ -82,7 +82,7 @@ class MathExecutor * * @return array<string, array{callable, int, bool}> */ - protected function defaultOperators() : array + protected function defaultOperators(): array { return [ '+' => [ @@ -210,7 +210,7 @@ class MathExecutor * @param Operator $operator * @return MathExecutor */ - public function addOperator(Operator $operator) : self + public function addOperator(Operator $operator): self { $this->operators[$operator->operator] = $operator; return $this; @@ -222,7 +222,7 @@ class MathExecutor * * @return array<callable> */ - protected function defaultFunctions() : array + protected function defaultFunctions(): array { return [ 'abs' => function ($arg) { @@ -459,7 +459,7 @@ class MathExecutor * @return MathExecutor * @throws ReflectionException */ - public function addFunction(string $name, ?callable $function = null, ?int $places = null) : self + public function addFunction(string $name, ?callable $function = null, ?int $places = null): self { $this->functions[$name] = new CustomFunction($name, $function, $places); return $this; @@ -470,7 +470,7 @@ class MathExecutor * * @return array<string, float> */ - protected function defaultVars() : array + protected function defaultVars(): array { return [ 'pi' => 3.14159265359, @@ -483,7 +483,7 @@ class MathExecutor * * @return array<string, float|string> */ - public function getVars() : array + public function getVars(): array { return $this->variables; } @@ -493,11 +493,14 @@ class MathExecutor * * @param string $variable * @return integer|float - * @throws UnknownVariableException + * @throws UnknownVariableException if VarNotFoundHandler is not set */ public function getVar(string $variable) { if (!array_key_exists($variable, $this->variables)) { + if ($this->onVarNotFound) { + return call_user_func($this->onVarNotFound, $variable); + } throw new UnknownVariableException("Variable ({$variable}) not set"); } return $this->variables[$variable]; @@ -510,7 +513,7 @@ class MathExecutor * @param int|float $value * @return MathExecutor */ - public function setVar(string $variable, $value) : self + public function setVar(string $variable, $value): self { if (!is_scalar($value) && $value !== null) { $type = gettype($value); @@ -522,6 +525,16 @@ class MathExecutor } /** + * Test to see if a variable exists + * + * @param string $variable + */ + public function varExists(string $variable): bool + { + return array_key_exists($variable, $this->variables); + } + + /** * Add variables to executor * * @param array<string, float|int|string> $variables @@ -529,7 +542,7 @@ class MathExecutor * @return MathExecutor * @throws \Exception */ - public function setVars(array $variables, bool $clear = true) : self + public function setVars(array $variables, bool $clear = true): self { if ($clear) { $this->removeVars(); @@ -560,7 +573,7 @@ class MathExecutor * @param string $variable * @return MathExecutor */ - public function removeVar(string $variable) : self + public function removeVar(string $variable): self { unset($this->variables[$variable]); return $this; @@ -570,7 +583,7 @@ class MathExecutor * Remove all variables and the variable not found handler * @return MathExecutor */ - public function removeVars() : self + public function removeVars(): self { $this->variables = []; $this->onVarNotFound = null; @@ -593,7 +606,7 @@ class MathExecutor * @return array<string, CustomFunction> containing callback and places indexed by * function name */ - public function getFunctions() : array + public function getFunctions(): array { return $this->functions; } @@ -603,7 +616,7 @@ class MathExecutor * * @return MathExecutor */ - public function setDivisionByZeroIsZero() : self + public function setDivisionByZeroIsZero(): self { $this->addOperator(new Operator("/", false, 180, function ($a, $b) { if ($b == 0) { @@ -618,7 +631,7 @@ class MathExecutor * Get cache array with tokens * @return array<string, Token[]> */ - public function getCache() : array + public function getCache(): array { return $this->cache; } @@ -626,7 +639,7 @@ class MathExecutor /** * Clear token's cache */ - public function clearCache() : void + public function clearCache(): void { $this->cache = []; } |