108 lines
2.1 KiB
PHP
108 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace League\Plates\Template;
|
|
|
|
use League\Plates\Extension\ExtensionInterface;
|
|
use LogicException;
|
|
|
|
/**
|
|
* A template function.
|
|
*/
|
|
class Func
|
|
{
|
|
/**
|
|
* The function name.
|
|
* @var string
|
|
*/
|
|
protected $name;
|
|
|
|
/**
|
|
* The function callback.
|
|
* @var callable
|
|
*/
|
|
protected $callback;
|
|
|
|
/**
|
|
* Create new Func instance.
|
|
* @param string $name
|
|
* @param callable $callback
|
|
*/
|
|
public function __construct($name, $callback)
|
|
{
|
|
$this->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);
|
|
}
|
|
}
|