setName($name); $this->setCallback($callback); } /** * Set the function name. * @param string $name * @return Func */ public function setName($name) { if (preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $name) !== 1) { throw new LogicException( 'Not a valid function name.' ); } $this->name = $name; return $this; } /** * Get the function name. * @return string */ public function getName() { return $this->name; } /** * Set the function callback * @param callable $callback * @return Func */ public function setCallback($callback) { if (!is_callable($callback, true)) { throw new LogicException( 'Not a valid function callback.' ); } $this->callback = $callback; return $this; } /** * Get the function callback. * @return callable */ public function getCallback() { return $this->callback; } /** * Call the function. * @param Template $template * @param array $arguments * @return mixed */ public function call(Template $template = null, $arguments = array()) { if (is_array($this->callback) and isset($this->callback[0]) and $this->callback[0] instanceof ExtensionInterface ) { $this->callback[0]->template = $template; } return call_user_func_array($this->callback, $arguments); } }