Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace DI\Definition;
6
 
7
/**
8
 * Definition of a value or class with a factory.
9
 *
10
 * @author Matthieu Napoli <matthieu@mnapoli.fr>
11
 */
12
class FactoryDefinition implements Definition
13
{
14
    /**
15
     * Entry name.
16
     */
17
    private string $name;
18
 
19
    /**
20
     * Callable that returns the value.
21
     * @var callable
22
     */
23
    private $factory;
24
 
25
    /**
26
     * Factory parameters.
27
     * @var mixed[]
28
     */
29
    private array $parameters;
30
 
31
    /**
32
     * @param string $name Entry name
33
     * @param callable|array|string $factory Callable that returns the value associated to the entry name.
34
     * @param array $parameters Parameters to be passed to the callable
35
     */
36
    public function __construct(string $name, callable|array|string $factory, array $parameters = [])
37
    {
38
        $this->name = $name;
39
        $this->factory = $factory;
40
        $this->parameters = $parameters;
41
    }
42
 
43
    public function getName() : string
44
    {
45
        return $this->name;
46
    }
47
 
48
    public function setName(string $name) : void
49
    {
50
        $this->name = $name;
51
    }
52
 
53
    /**
54
     * @return callable|array|string Callable that returns the value associated to the entry name.
55
     */
56
    public function getCallable() : callable|array|string
57
    {
58
        return $this->factory;
59
    }
60
 
61
    /**
62
     * @return array Array containing the parameters to be passed to the callable, indexed by name.
63
     */
64
    public function getParameters() : array
65
    {
66
        return $this->parameters;
67
    }
68
 
69
    public function replaceNestedDefinitions(callable $replacer) : void
70
    {
71
        $this->parameters = array_map($replacer, $this->parameters);
72
    }
73
 
74
    public function __toString() : string
75
    {
76
        return 'Factory';
77
    }
78
}