AbstractProvider   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
dl 0
loc 72
c 0
b 0
f 0
wmc 10
lcom 0
cbo 1
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A info() 0 12 3
getBankInfoByCardNo() 0 1 ?
mapInfoToObject() 0 1 ?
A getBankIcon() 0 4 1
B arrayItem() 0 20 6
1
<?php
2
3
namespace Sco\Bankcard\Providers;
4
5
use InvalidArgumentException;
6
use Sco\Bankcard\Contracts\Provider as ProviderContract;
7
8
abstract class AbstractProvider implements ProviderContract
9
{
10
11
    /**
12
     * 通过卡号获取银行卡信息.
13
     *
14
     * @param string $cardNo
15
     *
16
     * @return array
17
     */
18
    abstract protected function getBankInfoByCardNo($cardNo);
19
20
    /**
21
     * 映射原始银行卡信息为 Info 对象.
22
     *
23
     * @param array $bankInfo
24
     *
25
     * @return \Sco\Bankcard\Info
26
     */
27
    abstract protected function mapInfoToObject(array $bankInfo);
28
29
    /**
30
     * @inheritdoc
31
     */
32
    public function info($cardNo = null)
33
    {
34
        if (empty($cardNo) || !is_numeric($cardNo)) {
35
            throw new InvalidArgumentException();
36
        }
37
38
        $bankInfo = $this->getBankInfoByCardNo($cardNo);
39
40
        $info = $this->mapInfoToObject($bankInfo)->merge(['cardNo' => $cardNo]);
41
42
        return $info;
43
    }
44
45
    protected function getBankIcon($bankCode)
46
    {
47
        return '';
48
    }
49
50
    /**
51
     * Return array item by key.
52
     *
53
     * @param array  $array
54
     * @param string $key
55
     * @param mixed  $default
56
     *
57
     * @return mixed
58
     */
59
    protected function arrayItem(array $array, $key, $default = null)
60
    {
61
        if (is_null($key)) {
62
            return $array;
63
        }
64
65
        if (isset($array[$key])) {
66
            return $array[$key];
67
        }
68
69
        foreach (explode('.', $key) as $segment) {
70
            if (!is_array($array) || !array_key_exists($segment, $array)) {
71
                return $default;
72
            }
73
74
            $array = $array[$segment];
75
        }
76
77
        return $array;
78
    }
79
}
80