CloneToManyTrait   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
c 1
b 0
f 0
lcom 0
cbo 0
dl 0
loc 30
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B cloneToMany() 0 17 5
1
<?php
2
/**
3
 * @year    2016
4
 * @link    https://github.com/nnx-framework/cloner
5
 * @author  Lobanov Aleksandr <[email protected]>
6
 */
7
8
namespace Nnx\Cloner;
9
10
/**
11
 * Class CloneToManyTrait
12
 *
13
 * @package Nnx\Cloner
14
 */
15
trait CloneToManyTrait
16
{
17
    /**
18
     * Пример вызова:
19
     *      $this->array = $this->cloneToMany($this->array, $this, 'parent');
20
     *
21
     * @param $array        array|\Traversable объектов для клонирования
22
     * @param $parentObject mixed родительский объект для клонированных объектов
23
     * @param $parentName   string|null название связи с родительским объектом
24
     *
25
     * @return array
26
     */
27
    protected function cloneToMany($array, $parentObject = null, $parentName = null)
28
    {
29
        $newArray = [];
30
        foreach ($array as $item) {
31
            if (is_object($item)) {
32
                $clone = clone $item;
33
                if ($parentName !== null) {
34
                    $method = 'set' . ucfirst($parentName);
35
                    if (method_exists($clone, $method)) {
36
                        $clone->$method($parentObject);
37
                    }
38
                }
39
                $newArray[] = $clone;
40
            }
41
        }
42
        return $newArray;
43
    }
44
}
45