Completed
Push — master ( d52166...66485f )
by Jim
02:29
created

Str::camel()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: lenovo
5
 * Date: 6/15/2018
6
 * Time: 11:18 AM
7
 */
8
9
namespace TimSDK\Support;
10
11
class Str
12
{
13
    /**
14
     * The cache of snake-cased words.
15
     *
16
     * @var array
17
     */
18
    protected static $snakeCache = [];
19
20
    /**
21
     * The cache of camel-cased words.
22
     *
23
     * @var array
24
     */
25
    protected static $camelCache = [];
26
27
    /**
28
     * The cache of studly-cased words.
29
     *
30
     * @var array
31
     */
32
    protected static $studlyCache = [];
33
34
    /**
35
     * Determine if a given string starts with a given substring.
36
     *
37
     * @param  string  $haystack
38
     * @param  string|array  $needles
39
     * @return bool
40
     */
41
    public static function startsWith($haystack, $needles)
42
    {
43
        foreach ((array) $needles as $needle) {
44
            if ($needle !== '' && substr($haystack, 0, strlen($needle)) === (string) $needle) {
45
                return true;
46
            }
47
        }
48
        return false;
49
    }
50
51
    /**
52
     * Determine if a given string ends with a given substring.
53
     *
54
     * @param  string  $haystack
55
     * @param  string|array  $needles
56
     * @return bool
57
     */
58
    public static function endsWith($haystack, $needles)
59
    {
60
        foreach ((array) $needles as $needle) {
61
            if (substr($haystack, -strlen($needle)) === (string) $needle) {
62
                return true;
63
            }
64
        }
65
        return false;
66
    }
67
68
    /**
69
     * Convert a string to snake case.
70
     *
71
     * @param  string  $value
72
     * @param  string  $delimiter
73
     * @return string
74
     */
75
    public static function snake($value, $delimiter = '_')
76
    {
77
        $key = $value;
78
79
        if (isset(static::$snakeCache[$key][$delimiter])) {
80
            return static::$snakeCache[$key][$delimiter];
81
        }
82
83
        if (! ctype_lower($value)) {
84
            $value = preg_replace('/\s+/u', '', ucwords($value));
85
86
            $value = static::lower(preg_replace('/(.)(?=[A-Z])/u', '$1'.$delimiter, $value));
87
        }
88
89
        return static::$snakeCache[$key][$delimiter] = $value;
90
    }
91
92
    /**
93
     * Convert a value to camel case.
94
     *
95
     * @param  string  $value
96
     * @return string
97
     */
98
    public static function camel($value)
99
    {
100
        if (isset(static::$camelCache[$value])) {
101
            return static::$camelCache[$value];
102
        }
103
104
        return static::$camelCache[$value] = lcfirst(static::studly($value));
105
    }
106
107
    /**
108
     * Convert a value to studly caps case.
109
     *
110
     * @param  string  $value
111
     * @return string
112
     */
113
    public static function studly($value)
114
    {
115
        $key = $value;
116
117
        if (isset(static::$studlyCache[$key])) {
118
            return static::$studlyCache[$key];
119
        }
120
121
        $value = ucwords(str_replace(['-', '_'], ' ', $value));
122
123
        return static::$studlyCache[$key] = str_replace(' ', '', $value);
124
    }
125
126
    /**
127
     * Convert the given string to lower-case.
128
     *
129
     * @param  string  $value
130
     * @return string
131
     */
132
    public static function lower($value)
133
    {
134
        return mb_strtolower($value, 'UTF-8');
135
    }
136
137
    /**
138
     * Convert the given string to upper-case.
139
     *
140
     * @param  string  $value
141
     * @return string
142
     */
143
    public static function upper($value)
144
    {
145
        return mb_strtoupper($value, 'UTF-8');
146
    }
147
}
148