compileDynamic() public static method

compile partial as closure, stored in context
public static compileDynamic ( array\arraystring | integer> &$context, string $name ) : string | null
$context array\arraystring | integer>
$name string partial name
return string | null $code compiled PHP code when success
Example #1
0
 /**
  * validate partial block token
  *
  * @param array<string,array|string|integer> $context current compile context
  * @param array<boolean|integer|string|array> $vars parsed arguments list
  *
  * @return boolean|null Return true when partial block ends
  */
 protected static function partialBlock(&$context, $vars)
 {
     if (count($context['partialblock']) > 0) {
         $ended = false;
         $append = $context['currentToken'][Token::POS_LOTHER] . $context['currentToken'][Token::POS_LSPACE];
         array_walk($context['partialblock'], function (&$pb) use($context, $append) {
             $pb .= $append;
         });
         if ($context['currentToken'][Token::POS_OP] === '/') {
             if (static::blockEnd($context, $vars, '#>') !== null) {
                 $c = $context['stack'][count($context['stack']) - 4];
                 $found = Partial::resolve($context, $vars[0][0]) !== null;
                 $v = $found ? "@partial-block{$context['parsed'][0][$c][1][Parser::PARTIALBLOCK]}" : "{$vars[0][0]}";
                 if ($found) {
                     $context['partials'][$v] = $context['partialblock'][0];
                 }
                 $context['usedPartial'][$v] = $context['partialblock'][0];
                 Partial::compileDynamic($context, $v);
                 if ($found) {
                     Partial::read($context, $vars[0][0]);
                 }
                 array_shift($context['partialblock']);
                 $context['parsed'][0] = array_slice($context['parsed'][0], 0, $c + 1);
                 $ended = true;
             }
         }
         $append = Token::toString($context['currentToken']);
         array_walk($context['partialblock'], function (&$pb) use($context, $append) {
             $pb .= $append;
         });
         return $ended;
     }
 }