Vous êtes connecté en tant que anonymous Se Deconnecter
vendor/illuminate/view/Compilers/Concerns/CompilesLoops.php
4f5a31d2
 <?php
 
 namespace Illuminate\View\Compilers\Concerns;
 
 trait CompilesLoops
 {
     /**
      * Counter to keep track of nested forelse statements.
      *
      * @var int
      */
     protected $forElseCounter = 0;
 
     /**
      * Compile the for-else statements into valid PHP.
      *
      * @param  string  $expression
      * @return string
      */
     protected function compileForelse($expression)
     {
         $empty = '$__empty_'.++$this->forElseCounter;
 
         preg_match('/\( *(.*) +as *(.*)\)$/is', $expression, $matches);
 
         $iteratee = trim($matches[1]);
 
         $iteration = trim($matches[2]);
 
         $initLoop = "\$__currentLoopData = {$iteratee}; \$__env->addLoop(\$__currentLoopData);";
 
         $iterateLoop = '$__env->incrementLoopIndices(); $loop = $__env->getLastLoop();';
 
         return "<?php {$empty} = true; {$initLoop} foreach(\$__currentLoopData as {$iteration}): {$iterateLoop} {$empty} = false; ?>";
     }
 
     /**
      * Compile the for-else-empty and empty statements into valid PHP.
      *
      * @param  string  $expression
      * @return string
      */
     protected function compileEmpty($expression)
     {
         if ($expression) {
             return "<?php if(empty{$expression}): ?>";
         }
 
         $empty = '$__empty_'.$this->forElseCounter--;
 
         return "<?php endforeach; \$__env->popLoop(); \$loop = \$__env->getLastLoop(); if ({$empty}): ?>";
     }
 
     /**
      * Compile the end-for-else statements into valid PHP.
      *
      * @return string
      */
     protected function compileEndforelse()
     {
         return '<?php endif; ?>';
     }
 
     /**
      * Compile the end-empty statements into valid PHP.
      *
      * @return string
      */
     protected function compileEndEmpty()
     {
         return '<?php endif; ?>';
     }
 
     /**
      * Compile the for statements into valid PHP.
      *
      * @param  string  $expression
      * @return string
      */
     protected function compileFor($expression)
     {
         return "<?php for{$expression}: ?>";
     }
 
     /**
      * Compile the for-each statements into valid PHP.
      *
      * @param  string  $expression
      * @return string
      */
     protected function compileForeach($expression)
     {
         preg_match('/\( *(.*) +as *(.*)\)$/is', $expression, $matches);
 
         $iteratee = trim($matches[1]);
 
         $iteration = trim($matches[2]);
 
         $initLoop = "\$__currentLoopData = {$iteratee}; \$__env->addLoop(\$__currentLoopData);";
 
         $iterateLoop = '$__env->incrementLoopIndices(); $loop = $__env->getLastLoop();';
 
         return "<?php {$initLoop} foreach(\$__currentLoopData as {$iteration}): {$iterateLoop} ?>";
     }
 
     /**
      * Compile the break statements into valid PHP.
      *
      * @param  string  $expression
      * @return string
      */
     protected function compileBreak($expression)
     {
         if ($expression) {
             preg_match('/\(\s*(-?\d+)\s*\)$/', $expression, $matches);
 
             return $matches ? '<?php break '.max(1, $matches[1]).'; ?>' : "<?php if{$expression} break; ?>";
         }
 
         return '<?php break; ?>';
     }
 
     /**
      * Compile the continue statements into valid PHP.
      *
      * @param  string  $expression
      * @return string
      */
     protected function compileContinue($expression)
     {
         if ($expression) {
             preg_match('/\(\s*(-?\d+)\s*\)$/', $expression, $matches);
 
             return $matches ? '<?php continue '.max(1, $matches[1]).'; ?>' : "<?php if{$expression} continue; ?>";
         }
 
         return '<?php continue; ?>';
     }
 
     /**
      * Compile the end-for statements into valid PHP.
      *
      * @return string
      */
     protected function compileEndfor()
     {
         return '<?php endfor; ?>';
     }
 
     /**
      * Compile the end-for-each statements into valid PHP.
      *
      * @return string
      */
     protected function compileEndforeach()
     {
         return '<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>';
     }
 
     /**
      * Compile the while statements into valid PHP.
      *
      * @param  string  $expression
      * @return string
      */
     protected function compileWhile($expression)
     {
         return "<?php while{$expression}: ?>";
     }
 
     /**
      * Compile the end-while statements into valid PHP.
      *
      * @return string
      */
     protected function compileEndwhile()
     {
         return '<?php endwhile; ?>';
     }
 }