public function doReplacements($value = null)
{
if ($value === null) {
$this->data = $this->doReplacements($this->data);
return;
}
if (!is_array($value) && ('%' !== substr($value, 0, 1) && '%' !== substr($value, -1, 1))) {
return $value;
}
if (is_array($value)) {
foreach ($value as $k => $v) {
if ($v === null) {
continue;
}
$value[$k] = $this->doReplacements($v);
}
return $value;
}
if (is_string($value)) {
$serviceName = substr($value, 1, strlen($value) - 2);
if (strpos($serviceName, ':') !== false) {
list($serviceName, $params) = explode(':', $serviceName);
} else {
$params = [];
}
if (!isset($this->app[$serviceName])) {
return;
}
$service = $this->app[$serviceName];
if (is_callable($service)) {
return call_user_func_array($service, [$params]);
} else {
return $service;
}
}
return $value;
}