CalculatorFactoryAbstract   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 28
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
wmc 4
c 0
b 0
f 0
lcom 0
cbo 0
dl 0
loc 28
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 3
A manufactureInstance() 0 5 1
1
<?php
2
3
namespace FinanCalc\Interfaces\Calculator {
4
5
    use Exception;
6
    use FinanCalc\Constants\ErrorMessages;
7
    use ReflectionClass;
8
9
    /**
10
     * Class CalculatorFactoryAbstract
11
     * @package FinanCalc\Interfaces
12
     */
13
    abstract class CalculatorFactoryAbstract
14
    {
15
        const MANUFACTURED_CLASS_NAME = null;
16
17
        /**
18
         * @throws Exception
19
         */
20
        final public function __construct()
21
        {
22
            if (!is_string(static::MANUFACTURED_CLASS_NAME)) {
23
                throw new Exception(ErrorMessages::getMustDefineManufacturedClassNameMessage());
24
            }
25
26
            if (!class_exists(static::MANUFACTURED_CLASS_NAME)) {
27
                throw new Exception(ErrorMessages::getClassNotDefinedMessage(static::MANUFACTURED_CLASS_NAME));
28
            }
29
        }
30
31
        /**
32
         * @param array $args
33
         * @return CalculatorAbstract
34
         */
35
        final protected function manufactureInstance(array $args)
36
        {
37
            $manufacturedClass = new ReflectionClass(static::MANUFACTURED_CLASS_NAME);
38
            return $manufacturedClass->newInstanceArgs($args);
39
        }
40
    }
41
}
42