Skip to content

Commit 0e85f43

Browse files
committed
feat: add new class StrObject, add more string helper methods
1 parent 919cc56 commit 0e85f43

File tree

8 files changed

+337
-33
lines changed

8 files changed

+337
-33
lines changed

src/Str/StrHelper.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Toolkit\Stdlib\Str;
4+
5+
/**
6+
* Class StrHelper
7+
*
8+
* @package Toolkit\Stdlib\Str
9+
*/
10+
class StrHelper extends StringHelper
11+
{
12+
13+
}

src/Str/StrObject.php

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Toolkit\Stdlib\Str;
4+
5+
use Toolkit\Stdlib\Str;
6+
use function trim;
7+
8+
/**
9+
* Class StrObject
10+
*
11+
* @package Toolkit\Stdlib\Str
12+
*/
13+
class StrObject
14+
{
15+
/**
16+
* @var self
17+
*/
18+
private static $global;
19+
20+
/**
21+
* @var string
22+
*/
23+
private $string;
24+
25+
/**
26+
* @param string $str
27+
*
28+
* @return self
29+
*/
30+
public static function global(string $str): self
31+
{
32+
if (!self::$global) {
33+
self::$global = new self($str);
34+
}
35+
36+
return self::$global;
37+
}
38+
39+
/**
40+
* @param string $str
41+
*
42+
* @return self
43+
*/
44+
public static function new(string $str): self
45+
{
46+
return new self($str);
47+
}
48+
49+
/**
50+
* Class constructor.
51+
*
52+
* @param string $str
53+
*/
54+
public function __construct(string $str)
55+
{
56+
$this->string = $str;
57+
}
58+
59+
public function reset(): void
60+
{
61+
$this->string = '';
62+
}
63+
64+
/**
65+
* @param string $content
66+
*/
67+
public function append(string $content): void
68+
{
69+
$this->string .= $content;
70+
}
71+
72+
/**
73+
* @param string $content
74+
*/
75+
public function prepend(string $content): void
76+
{
77+
$this->string = $content . $this->string;
78+
}
79+
80+
/**
81+
* @param string $string
82+
*/
83+
public function setString(string $string): void
84+
{
85+
$this->string = $string;
86+
}
87+
88+
/**
89+
* @param string $chars
90+
*
91+
* @return $this
92+
*/
93+
public function trim(string $chars = " \t\n\r\0\x0B"): self
94+
{
95+
$this->string = trim($this->string, $chars);
96+
return $this;
97+
}
98+
99+
/**
100+
* @return int
101+
*/
102+
public function length(): int
103+
{
104+
return Str::strlen($this->string);
105+
}
106+
107+
/**
108+
* @return string
109+
*/
110+
public function trimmed(): string
111+
{
112+
return trim($this->string);
113+
}
114+
115+
// ------------------ check ------------------
116+
117+
/**
118+
* @param string $sub
119+
*
120+
* @return bool
121+
*/
122+
public function contains(string $sub): bool
123+
{
124+
return Str::strpos($this->string, $sub) !== false;
125+
}
126+
127+
/**
128+
* @param string $prefix
129+
*
130+
* @return bool
131+
*/
132+
public function hasPrefix(string $prefix): bool
133+
{
134+
return Str::hasPrefix($this->string, $prefix);
135+
}
136+
137+
/**
138+
* @param string $suffix
139+
*
140+
* @return bool
141+
*/
142+
public function hasSuffix(string $suffix): bool
143+
{
144+
return Str::hasSuffix($this->string, $suffix);
145+
}
146+
147+
// ------------------ convert ------------------
148+
149+
/**
150+
* @return int
151+
*/
152+
public function getInt(): int
153+
{
154+
return (int)$this->string;
155+
}
156+
157+
/**
158+
* @return int[]
159+
*/
160+
public function getInts(string $sep = ','): array
161+
{
162+
return Str::str2ints($this->string, $sep);
163+
}
164+
165+
/**
166+
* @return string[]
167+
*/
168+
public function getStrings(string $sep = ',', int $limit = 0): array
169+
{
170+
return Str::explode($this->string, $sep, $limit);
171+
}
172+
173+
/**
174+
* @return string
175+
*/
176+
public function toString(): string
177+
{
178+
return $this->string;
179+
}
180+
181+
/**
182+
* @return string
183+
*/
184+
public function getString(): string
185+
{
186+
return $this->string;
187+
}
188+
189+
/**
190+
* @return string
191+
*/
192+
public function __toString(): string
193+
{
194+
return $this->string;
195+
}
196+
197+
}

src/Str/StringHelper.php

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,38 +17,24 @@
1717
use Toolkit\Stdlib\Str\Traits\StringTruncateHelperTrait;
1818
use Toolkit\Stdlib\Util\UUID;
1919
use function array_merge;
20-
use function array_slice;
2120
use function base64_encode;
2221
use function count;
23-
use function func_get_arg;
24-
use function func_num_args;
25-
use function function_exists;
2622
use function hash;
2723
use function hex2bin;
28-
use function implode;
29-
use function in_array;
3024
use function is_int;
3125
use function is_string;
32-
use function mb_internal_encoding;
33-
use function mb_strlen;
3426
use function mb_strwidth;
35-
use function mb_substr;
36-
use function preg_match;
37-
use function preg_match_all;
3827
use function preg_split;
3928
use function random_bytes;
4029
use function str_pad;
4130
use function str_repeat;
4231
use function str_replace;
4332
use function str_word_count;
44-
use function strip_tags;
4533
use function strlen;
4634
use function strpos;
4735
use function substr;
4836
use function trim;
4937
use function uniqid;
50-
use function utf8_decode;
51-
use function utf8_encode;
5238
use const STR_PAD_LEFT;
5339
use const STR_PAD_RIGHT;
5440

@@ -68,10 +54,10 @@ abstract class StringHelper
6854
use StringTruncateHelperTrait;
6955

7056
/**
71-
* @param string $str
72-
* @param int $padLen
73-
* @param string $padStr
74-
* @param int $padType
57+
* @param string|mixed $str
58+
* @param int|float $padLen
59+
* @param string $padStr
60+
* @param int $padType
7561
*
7662
* @return string
7763
*/
@@ -81,9 +67,9 @@ public static function pad($str, $padLen, string $padStr = ' ', int $padType = S
8167
}
8268

8369
/**
84-
* @param string $str
85-
* @param int $padLen
86-
* @param string $padStr
70+
* @param string|mixed $str
71+
* @param int|float $padLen
72+
* @param string $padStr
8773
*
8874
* @return string
8975
*/
@@ -93,9 +79,9 @@ public static function padLeft($str, $padLen, string $padStr = ' '): string
9379
}
9480

9581
/**
96-
* @param string $str
97-
* @param int $padLen
98-
* @param string $padStr
82+
* @param string|mixed $str
83+
* @param int|float $padLen
84+
* @param string $padStr
9985
*
10086
* @return string
10187
*/
@@ -105,8 +91,8 @@ public static function padRight($str, $padLen, string $padStr = ' '): string
10591
}
10692

10793
/**
108-
* @param string $str
109-
* @param int $padLen
94+
* @param string|mixed $str
95+
* @param int|float $padLen
11096
* @param string $padStr
11197
* @param int $padType
11298
*
@@ -332,7 +318,7 @@ public static function wordCount(string $str): int
332318
*/
333319
public static function utf8WordCount(string $str): int
334320
{
335-
return count(preg_split('~[^\p{L}\p{N}\']+~u',$str));
321+
return count(preg_split('~[^\p{L}\p{N}\']+~u', $str));
336322
}
337323

338324
/**

src/Str/Traits/StringCheckHelperTrait.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,30 @@ public static function strrpos(string $str, string $find, int $offset = 0, strin
189189
strrpos($str, $find, $offset);
190190
}
191191

192+
/**
193+
* @param string $str
194+
* @param string $prefix
195+
*
196+
* @return bool
197+
*/
198+
public static function hasPrefix(string $str, string $prefix): bool
199+
{
200+
return self::strpos($str,$prefix) === 0;
201+
}
202+
203+
/**
204+
* @param string $str
205+
* @param string $suffix
206+
*
207+
* @return bool
208+
*/
209+
public static function hasSuffix(string $str, string $suffix): bool
210+
{
211+
$pos = self::strpos($str, $suffix);
212+
213+
return $pos !== false && self::substr($str, - self::strlen($suffix)) === $suffix;
214+
}
215+
192216
/**
193217
* 使用正则验证数据
194218
*

src/Str/Traits/StringLengthHelperTrait.php

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ trait StringLengthHelperTrait
3333
/**
3434
* from Symfony
3535
*
36-
* @param string $string
36+
* @param string|int $string
3737
*
3838
* @return int
3939
*/
@@ -61,14 +61,19 @@ public static function len2($str, string $encoding = 'UTF-8'): int
6161
}
6262

6363
/**
64-
* @param string $str
65-
* @param string $encoding
64+
* @param string|mixed $str
65+
* @param string $encoding
66+
* @param bool $decodeHTML
6667
*
6768
* @return int
6869
*/
69-
public static function strlen($str, string $encoding = 'UTF-8'): int
70+
public static function strlen($str, string $encoding = 'UTF-8', bool $decodeHTML = false): int
7071
{
71-
$str = html_entity_decode((string)$str, ENT_COMPAT, 'UTF-8');
72+
if ($decodeHTML) {
73+
$str = html_entity_decode((string)$str, ENT_COMPAT, 'UTF-8');
74+
} else {
75+
$str = (string)$str;
76+
}
7277

7378
return function_exists('mb_strlen') ? mb_strlen($str, $encoding) : strlen($str);
7479
}

0 commit comments

Comments
 (0)