12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\ExpressionLanguage\Node;
- use Symfony\Component\ExpressionLanguage\Compiler;
- /**
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @internal
- */
- class UnaryNode extends Node
- {
- private static $operators = array(
- '!' => '!',
- 'not' => '!',
- '+' => '+',
- '-' => '-',
- );
- public function __construct($operator, Node $node)
- {
- parent::__construct(
- array('node' => $node),
- array('operator' => $operator)
- );
- }
- public function compile(Compiler $compiler)
- {
- $compiler
- ->raw('(')
- ->raw(self::$operators[$this->attributes['operator']])
- ->compile($this->nodes['node'])
- ->raw(')')
- ;
- }
- public function evaluate($functions, $values)
- {
- $value = $this->nodes['node']->evaluate($functions, $values);
- switch ($this->attributes['operator']) {
- case 'not':
- case '!':
- return !$value;
- case '-':
- return -$value;
- }
- return $value;
- }
- }
|