4 * This file is part of Twig.
6 * (c) 2011 Fabien Potencier
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
13 * Checks if a variable is defined in the current context.
16 * {# defined works with variable names and variable attributes #}
17 * {% if foo is defined %}
22 * @author Fabien Potencier <fabien@symfony.com>
24 class Twig_Node_Expression_Test_Defined
extends Twig_Node_Expression_Test
26 public function __construct(Twig_NodeInterface
$node, $name, Twig_NodeInterface
$arguments = null, $lineno)
28 parent
::__construct($node, $name, $arguments, $lineno);
30 if ($node instanceof Twig_Node_Expression_Name
) {
31 $node->setAttribute('is_defined_test', true);
32 } elseif ($node instanceof Twig_Node_Expression_GetAttr
) {
33 $node->setAttribute('is_defined_test', true);
35 $this->changeIgnoreStrictCheck($node);
37 throw new Twig_Error_Syntax('The "defined" test only works with simple variables', $this->getLine());
41 protected function changeIgnoreStrictCheck(Twig_Node_Expression_GetAttr
$node)
43 $node->setAttribute('ignore_strict_check', true);
45 if ($node->getNode('node') instanceof Twig_Node_Expression_GetAttr
) {
46 $this->changeIgnoreStrictCheck($node->getNode('node'));
50 public function compile(Twig_Compiler
$compiler)
52 $compiler->subcompile($this->getNode('node'));