0278023cf17aaca7996345cb4453da4eb55cfa1c
[GitHub/WoltLab/WCF.git] /
1 <?php
2 /**
3 * PHP-DI
4 *
5 * @link http://php-di.org/
6 * @copyright Matthieu Napoli (http://mnapoli.fr/)
7 * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
8 */
9
10 namespace DI\Definition\Helper;
11
12 use DI\Definition\DecoratorDefinition;
13 use DI\Definition\FactoryDefinition;
14
15 /**
16 * Helps defining how to create an instance of a class using a factory (callable).
17 *
18 * @author Matthieu Napoli <matthieu@mnapoli.fr>
19 */
20 class FactoryDefinitionHelper implements DefinitionHelper
21 {
22 /**
23 * @var callable
24 */
25 private $factory;
26
27 /**
28 * @var string|null
29 */
30 private $scope;
31
32 /**
33 * @var bool
34 */
35 private $decorate;
36
37 /**
38 * @param callable $factory
39 * @param bool $decorate Is the factory decorating a previous definition?
40 */
41 public function __construct($factory, $decorate = false)
42 {
43 $this->factory = $factory;
44 $this->decorate = $decorate;
45 }
46
47 /**
48 * Defines the scope of the entry.
49 *
50 * @param string $scope
51 *
52 * @return FactoryDefinitionHelper
53 */
54 public function scope($scope)
55 {
56 $this->scope = $scope;
57 return $this;
58 }
59
60 /**
61 * @param string $entryName Container entry name
62 * @return FactoryDefinition
63 */
64 public function getDefinition($entryName)
65 {
66 if ($this->decorate) {
67 return new DecoratorDefinition($entryName, $this->factory, $this->scope);
68 }
69
70 return new FactoryDefinition($entryName, $this->factory, $this->scope);
71 }
72 }