/** * @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()); }
/** * @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()); }
/** * @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()); }