DslFor.class.php (865B)
1 <?php 2 3 namespace dsl\ast; 4 5 use dsl\DslRuntimeException; 6 use dsl\DslToken; 7 8 class DslFor implements DslStatement 9 { 10 private $name; 11 private $list; 12 private $statements; 13 14 /** 15 * DslFor constructor. 16 * 17 * @param $name String 18 * @param $list DslToken[] 19 * @param $statements DslToken[] 20 */ 21 public function __construct($name, $list, $statements) 22 { 23 $this->name = $name; 24 $this->list = new DslExpression( $list ); 25 $this->statements = new DslStatementList( $statements ); 26 } 27 28 29 public function execute( & $context ) { 30 31 $list = $this->list->execute( $context ); 32 33 if ( !is_array( $list ) ) 34 throw new DslRuntimeException('for value is not a list'); 35 36 $copiedContext = $context; 37 foreach( $list as $loopVar ) { 38 $copiedContext[ $this->name ] = $loopVar; 39 $this->statements->execute( $copiedContext ); 40 } 41 } 42 43 public function parse($tokens) 44 { 45 } 46 }