shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

Defined.php (1858B)


      1 <?php
      2 
      3 /*
      4  * This file is part of Twig.
      5  *
      6  * (c) 2011 Fabien Potencier
      7  *
      8  * For the full copyright and license information, please view the LICENSE
      9  * file that was distributed with this source code.
     10  */
     11 
     12 /**
     13  * Checks if a variable is defined in the current context.
     14  *
     15  * <pre>
     16  * {# defined works with variable names and variable attributes #}
     17  * {% if foo is defined %}
     18  *     {# ... #}
     19  * {% endif %}
     20  * </pre>
     21  *
     22  * @author Fabien Potencier <fabien@symfony.com>
     23  */
     24 class Twig_Node_Expression_Test_Defined extends Twig_Node_Expression_Test
     25 {
     26     public function __construct(Twig_NodeInterface $node, $name, Twig_NodeInterface $arguments = null, $lineno)
     27     {
     28         if ($node instanceof Twig_Node_Expression_Name) {
     29             $node->setAttribute('is_defined_test', true);
     30         } elseif ($node instanceof Twig_Node_Expression_GetAttr) {
     31             $node->setAttribute('is_defined_test', true);
     32 
     33             $this->changeIgnoreStrictCheck($node);
     34         } elseif ($node instanceof Twig_Node_Expression_Constant || $node instanceof Twig_Node_Expression_Array) {
     35             $node = new Twig_Node_Expression_Constant(true, $node->getLine());
     36         } else {
     37             throw new Twig_Error_Syntax('The "defined" test only works with simple variables.', $this->getLine());
     38         }
     39 
     40         parent::__construct($node, $name, $arguments, $lineno);
     41     }
     42 
     43     protected function changeIgnoreStrictCheck(Twig_Node_Expression_GetAttr $node)
     44     {
     45         $node->setAttribute('ignore_strict_check', true);
     46 
     47         if ($node->getNode('node') instanceof Twig_Node_Expression_GetAttr) {
     48             $this->changeIgnoreStrictCheck($node->getNode('node'));
     49         }
     50     }
     51 
     52     public function compile(Twig_Compiler $compiler)
     53     {
     54         $compiler->subcompile($this->getNode('node'));
     55     }
     56 }