CalculatorFactoryAbstract::manufactureInstance()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 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