Пример #1
0
 /**
  * @param TokenCollection $parameters
  * @return TokenString
  * @throws \Exception
  */
 public function call(TokenCollection $parameters)
 {
     $numParams = $parameters->count();
     $isRegExpr = \false;
     if ($numParams < 1) {
         $search = '';
     } else {
         $search = $parameters->current()->getValue();
         $isRegExpr = $parameters->current() instanceof TokenRegex;
     }
     if ($numParams < 2) {
         $replace = 'undefined';
     } else {
         $parameters->next();
         $replace = $parameters->current()->getValue();
     }
     if ($isRegExpr) {
         list($expression, $modifiers) = $this->splitRegex($search);
         $modifiers = str_replace('g', '', $modifiers, $count);
         $limit = $count > 0 ? -1 : 1;
         $value = preg_replace($expression . $modifiers, $replace, $this->token->getValue(), $limit);
     } else {
         $value = str_replace($search, $replace, $this->token->getValue());
     }
     return new TokenString($value, $this->token->getOffset(), $this->token->getStack());
 }
Пример #2
0
 /**
  * @param TokenCollection $parameters
  * @return TokenString
  */
 public function call(TokenCollection $parameters)
 {
     $params = [];
     if ($parameters->count() < 1) {
         $params[] = 0;
     } else {
         $params[] = (int) $parameters->current()->getValue();
     }
     if ($parameters->count() >= 2) {
         $parameters->next();
         $params[] = (int) $parameters->current()->getValue();
     }
     $value = call_user_func_array('substr', array_merge([$this->token->getValue()], $params));
     return new TokenString((string) $value, $this->token->getOffset(), $this->token->getStack());
 }
Пример #3
0
 /**
  * @param TokenCollection $parameters
  * @return Tokens\TokenArray
  */
 public function call(TokenCollection $parameters)
 {
     $separator = $parameters->current();
     if (!$separator || !is_string($separator->getValue())) {
         $newValue = [$this->token->getValue()];
     } else {
         $params = [$separator->getValue(), $this->token->getValue()];
         if ($parameters->count() >= 2) {
             $parameters->next();
             $params[] = (int) $parameters->current()->getValue();
         }
         if ($separator instanceof Tokens\TokenRegex) {
             $func = 'preg_split';
         } else {
             $func = 'explode';
         }
         $newValue = call_user_func_array($func, $params);
     }
     return new Tokens\TokenArray($newValue, $this->token->getOffset(), $this->token->getStack());
 }