Factory   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 24
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 7
c 1
b 0
f 0
dl 0
loc 24
ccs 7
cts 7
cp 1
rs 10
wmc 2

1 Method

Rating   Name   Duplication   Size   Complexity  
A create() 0 15 2
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * Derafu: Biblioteca PHP (Núcleo).
7
 * Copyright (C) Derafu <https://www.derafu.org>
8
 *
9
 * Este programa es software libre: usted puede redistribuirlo y/o modificarlo
10
 * bajo los términos de la Licencia Pública General Affero de GNU publicada por
11
 * la Fundación para el Software Libre, ya sea la versión 3 de la Licencia, o
12
 * (a su elección) cualquier versión posterior de la misma.
13
 *
14
 * Este programa se distribuye con la esperanza de que sea útil, pero SIN
15
 * GARANTÍA ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD
16
 * PARA UN PROPÓSITO DETERMINADO. Consulte los detalles de la Licencia Pública
17
 * General Affero de GNU para obtener una información más detallada.
18
 *
19
 * Debería haber recibido una copia de la Licencia Pública General Affero de GNU
20
 * junto a este programa.
21
 *
22
 * En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
23
 */
24
25
namespace Derafu\Lib\Core\Helper;
26
27
use ReflectionClass;
28
use stdClass;
29
30
/**
31
 * Fábrica básica para creación de instancias de clases a partir de los datos y
32
 * el nombre de la clase.
33
 */
34
class Factory
35
{
36
    /**
37
     * Crea una instancia de una clase.
38
     *
39
     * @param array $data Datos con los atributos que se deben asignar.
40
     * @param string|null $class Si la clase no se especifica se usará stdClass.
41
     * @return object Instancia de la clase solicitada con sus atributos.
42
     */
43 9
    public static function create(array $data, ?string $class = null): object
44
    {
45 9
        $class = $class ?? stdClass::class;
46
47
        // Si no se indicó una clase, retorna un stdClass.
48 9
        if ($class === stdClass::class) {
49 7
            return (object) $data;
50
        }
51
52
        // Crear la instancia sin constructor.
53 2
        $reflectionClass = new ReflectionClass($class);
54 2
        $instance = $reflectionClass->newInstanceWithoutConstructor();
55
56
        // Hidratar la instancia con los datos.
57 2
        return Hydrator::hydrate($instance, $data);
58
    }
59
}
60