<?php namespace eMacros\Runtime\String;
use eMacros\Applicable; use eMacros\Scope; use eMacros\GenericList; use eMacros\Symbol;
class StringReplace implements Applicable { /** * Callback to invoke * @var callable */ public $callback; public function __construct($callback) { $this->callback = $callback; } /** * Replace ocurrences of a tring in another * Usage: (String::replace _str1 _str2 _subject) (String::ireplace _str1 _str2 _subject) * Returns: string * (non-PHPdoc) * @see \eMacros\Applicable::apply() */ public function apply(Scope $scope, GenericList $arguments) { $nargs = count($arguments); if ($nargs < 3) { throw new \BadFunctionCallException("StringReplace: Function expects at least 3 parameters."); } if ($nargs == 3) { return call_user_func($this->callback, $arguments[0]->evaluate($scope), $arguments[1]->evaluate($scope), $arguments[2]->evaluate($scope)); } else { $target = $arguments[3]; if (!($target instanceof Symbol)) { throw new \InvalidArgumentException(sprintf("StringReplace: Expected symbol as fourth argument but %s was found instead.", substr(strtolower(strstr(get_class($arguments[3]), '\\')), 1))); } $ref = $target->symbol; $func = $this->callback; return $func($arguments[0]->evaluate($scope), $arguments[1]->evaluate($scope), $arguments[2]->evaluate($scope), $scope->symbols[$ref]); } } } ?>
|