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