Completed
Push — master ( 7bcfa7...7f7fda )
by Andrii
01:58
created

ManagerTrait::hasObject()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
/**
3
 * Collection library for Yii2.
4
 *
5
 * @link      https://github.com/hiqdev/yii2-collection
6
 * @package   yii2-collection
7
 * @license   BSD-3-Clause
8
 * @copyright Copyright (c) 2015-2017, HiQDev (http://hiqdev.com/)
9
 */
10
11
namespace hiqdev\php\collection\yii;
12
13
use yii\helpers\Yii;
14
15
/**
16
 * Manager Trait.
17
 * Like basic collection but instantiates items when getting.
18
 */
19
trait ManagerTrait
20
{
21
    use ObjectTrait;
22
23
    /**
24
     * @var string default class to create item objects
25
     */
26
    protected $_itemClass;
27
28
    public function setItemClass($class)
29
    {
30
        $this->_itemClass = $class;
31
    }
32
33
    public function getItemClass()
34
    {
35
        return $this->_itemClass ?: get_called_class();
36
    }
37
38
    public function getItemConfig($name = null, array $config = [])
39
    {
40
        if (!isset($config['__class'])) {
41
            $config['__class'] = $this->getItemClass($name, $config) ?: get_called_class();
42
        }
43
44
        return $config;
45
    }
46
47
    /**
48
     * Creates item instance from array configuration.
49
     * @param string $name   item name
50
     * @param array  $config item instance configuration
51
     * @return object instance
52
     */
53
    protected function createItem($name, array $config = [])
54
    {
55
        return Yii::createObject($this->getItemConfig($name, $config));
56
    }
57
58
    /**
59
     * Returns item by name. Instantiates it before.
60
     * @param string $name item name
61
     * @param mixed $default default value
62
     * @return object item instance
63
     */
64
    public function getItem($name, $default = null)
65
    {
66
        if (empty($this->_items[$name])) {
67
            $this->_items[$name] = $default;
68
        }
69
        $item = &$this->_items[$name];
70
        if (is_array($item) || is_null($item)) {
71
            $item = $this->createItem($name, $item ?: []);
72
        }
73
74
        return $item;
75
    }
76
77
    public function hasObject($name)
78
    {
79
        return is_object($this->_items[$name]);
80
    }
81
82
    /**
83
     * Get them all as array of items!
84
     * Instantiates all the items.
85
     * @return array list of items
86
     * @see get
87
     */
88
    public function getItems()
89
    {
90
        foreach ($this->_items as $name => $item) {
91
            $this->getItem($name);
92
        }
93
94
        return $this->_items;
95
    }
96
97
    /**
98
     * Get raw items - uninstantiated.
99
     * @return array
100
     */
101
    public function rawItems()
102
    {
103
        return $this->_items;
104
    }
105
}
106