Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | <?php /** MicroInjector */ |
||
| 18 | class Injector implements IInjector |
||
| 19 | { |
||
| 20 | /** @var array $CONFIG Configuration */ |
||
| 21 | private static $CONFIG = []; |
||
| 22 | /** @var array $INJECTS Configured injects */ |
||
| 23 | private static $INJECTS = []; |
||
| 24 | |||
| 25 | |||
| 26 | /** |
||
| 27 | * Injector constructor. |
||
| 28 | * |
||
| 29 | * @access public |
||
| 30 | * @param string $configPath |
||
| 31 | * @result void |
||
| 32 | */ |
||
| 33 | public function __construct($configPath = '') |
||
| 40 | |||
| 41 | /** |
||
| 42 | * Add requirement to injector |
||
| 43 | * |
||
| 44 | * @access public |
||
| 45 | * @param string $name |
||
| 46 | * @param mixed $component |
||
| 47 | * @return void |
||
| 48 | */ |
||
| 49 | public function addRequirement($name, $component) |
||
| 57 | |||
| 58 | /** |
||
| 59 | * Check injector or config |
||
| 60 | * |
||
| 61 | * @access public |
||
| 62 | * @param string $name |
||
| 63 | * @return bool |
||
| 64 | */ |
||
| 65 | public function check($name) |
||
| 69 | |||
| 70 | /** |
||
| 71 | * Build object with injector |
||
| 72 | * |
||
| 73 | * class LogInject extends Injector { |
||
| 74 | * public function build() { |
||
| 75 | * return $this->get('logger'); |
||
| 76 | * } |
||
| 77 | * } |
||
| 78 | * $log = (new LogInject())->build(); |
||
| 79 | * |
||
| 80 | * @access protected |
||
| 81 | * @param string $name |
||
| 82 | * @return bool |
||
| 83 | */ |
||
| 84 | public function get($name) |
||
| 96 | |||
| 97 | /** |
||
| 98 | * Load injection |
||
| 99 | * |
||
| 100 | * @access public |
||
| 101 | * |
||
| 102 | * @param string $name Name injection |
||
| 103 | * |
||
| 104 | * @return bool |
||
| 105 | */ |
||
| 106 | private function loadInjection($name) |
||
| 151 | |||
| 152 | /** |
||
| 153 | * Build params from array |
||
| 154 | * |
||
| 155 | * @access private |
||
| 156 | * @param array $params |
||
| 157 | * @return array |
||
| 158 | */ |
||
| 159 | private function buildParams(array $params) |
||
| 174 | |||
| 175 | /** |
||
| 176 | * Build calls arguments |
||
| 177 | * |
||
| 178 | * @access private |
||
| 179 | * @param array $params |
||
| 180 | * @return array |
||
| 181 | */ |
||
| 182 | View Code Duplication | private function buildCalls(array $params) |
|
| 204 | |||
| 205 | /** |
||
| 206 | * Make object with arguments |
||
| 207 | * |
||
| 208 | * @access private |
||
| 209 | * |
||
| 210 | * @param string $className |
||
| 211 | * @param array $arguments |
||
| 212 | * |
||
| 213 | * @return mixed |
||
| 214 | */ |
||
| 215 | View Code Duplication | private function makeObject($className, array $arguments = []) |
|
| 230 | } |