Passed
Push — master ( 566a3a...fbef46 )
by 世昌
02:19
created

ArrayDataTrait   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 115
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 18
dl 0
loc 115
rs 10
c 0
b 0
f 0
wmc 11

10 Methods

Rating   Name   Duplication   Size   Complexity  
A __unset() 0 4 1
A getJsonData() 0 3 1
A assertFieldName() 0 4 2
A __get() 0 4 1
A __set() 0 4 1
A __isset() 0 4 1
A toArray() 0 3 1
A checkFieldExist() 0 3 1
A getIterator() 0 3 1
A count() 0 3 1
1
<?php
2
namespace suda\database\struct;
3
4
use ArrayIterator;
5
use InvalidArgumentException;
6
7
trait ArrayDataTrait  
8
{
9
    use MagicArrayAccessTrait;
10
11
    /**
12
     * 表数据
13
     *
14
     * @var array
15
     */
16
    protected $data = [];
17
18
    /**
19
     * 设置值
20
     *
21
     * @param string $name
22
     * @param mixed $value
23
     */
24
    public function __set(string $name, $value)
25
    {
26
        $this->assertFieldName($name);
27
        $this->data[$name] = $value;
28
    }
29
30
    /**
31
     * 获取参数值
32
     *
33
     * @param string $name
34
     * @return mixed
35
     */
36
    public function __get(string $name)
37
    {
38
        $this->assertFieldName($name);
39
        return $this->data[$name] ?? null;
40
    }
41
42
    /**
43
     * 判断是否设置
44
     *
45
     * @param string $name
46
     * @return boolean
47
     */
48
    public function __isset(string $name)
49
    {
50
        $this->assertFieldName($name);
51
        return array_key_exists($name, $this->data);
52
    }
53
54
    /**
55
     * 取消设置值
56
     *
57
     * @param string $name
58
     */
59
    public function __unset(string $name)
60
    {
61
        $this->assertFieldName($name);
62
        unset($this->data[$name]);
63
    }
64
65
    /**
66
     * 断言字段
67
     *
68
     * @param string $name
69
     * @return void
70
     */
71
    protected function assertFieldName(string $name)
72
    {
73
        if ($this->checkFieldExist($name) === false) {
74
            throw new InvalidArgumentException(sprintf('[%s] has no attribute %s', static::class, $name), 0);
75
        }
76
    }
77
78
    /**
79
     * 检查字段是否存在
80
     *
81
     * @param string $name
82
     * @return boolean
83
     */
84
    public function checkFieldExist(string $name)
85
    {
86
        return strlen($name) > 0;
87
    }
88
89
    /**
90
     * 获取迭代器
91
     *
92
     * @return ArrayIterator
93
     */
94
    public function getIterator()
95
    {
96
        return new ArrayIterator($this->data);
97
    }
98
    
99
    /**
100
     * 转换成原始数组
101
     *
102
     * @return array
103
     */
104
    public function toArray():array
105
    {
106
        return $this->data;
107
    }
108
109
    /**
110
     * 计数
111
     *
112
     * @return int
113
     */
114
    public function count()
115
    {
116
        return count($this->data);
117
    }
118
119
    public function getJsonData()
120
    {
121
        return $this->data;
122
    }
123
}
124