本文整理匯總了PHP中Pimple::factory方法的典型用法代碼示例。如果您正苦於以下問題:PHP Pimple::factory方法的具體用法?PHP Pimple::factory怎麽用?PHP Pimple::factory使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類Pimple
的用法示例。
在下文中一共展示了Pimple::factory方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。
示例1: addFactory
/**
* Add service to container wrapping it before
*
* @param string $name
* @param mixed $data
*/
protected function addFactory($name, $data)
{
if ($data['type'] === self::TYPE_PARAM) {
$this->container[$name] = $this->container->protect($data['function']);
return;
}
$parameters = $this->parametersConfig;
$closure = function ($c) use($data, $parameters) {
$args = array();
// fetch arguments for injecting into object
if (!empty($data['arguments']) && is_array($data['arguments'])) {
foreach ($data['arguments'] as $argument) {
if (is_string($argument) && strlen($argument) > 1 && ($argument[0] == '@' || $argument[0] == '%' && $argument[strlen($argument) - 1] == '%' && strlen($argument) > 2)) {
$name = substr($argument, 1);
switch ($argument[0]) {
case '@':
$args[] = $c[$name];
break;
case '%':
$name = substr($name, 0, -1);
if ($parameters->has($name)) {
$args[] = $parameters->get($name);
}
break;
}
} else {
$args[] = $argument;
}
}
}
$class = new ReflectionClass($data['class']);
return $class->newInstanceArgs($args);
};
if ($data['type'] === self::TYPE_FACTORY) {
$closure = $this->container->factory($closure);
}
$this->container[$name] = $closure;
}