本文整理汇总了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;
}