Skip to content

Commit 7ef0040

Browse files
committed
PHP7.4 - Add "str_split" => "mb_str_split" mapping.
1 parent 4811794 commit 7ef0040

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

src/Fixer/Alias/MbStrFunctionsFixer.php

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,19 @@ final class MbStrFunctionsFixer extends AbstractFunctionReferenceFixer
2727
/**
2828
* @var array the list of the string-related function names and their mb_ equivalent
2929
*/
30-
private static $functions = [
30+
private static $functionsMap = [
31+
'str_split' => ['alternativeName' => 'mb_str_split', 'argumentCount' => [1, 2, 3]],
32+
'stripos' => ['alternativeName' => 'mb_stripos', 'argumentCount' => [2, 3]],
33+
'stristr' => ['alternativeName' => 'mb_stristr', 'argumentCount' => [2, 3]],
3134
'strlen' => ['alternativeName' => 'mb_strlen', 'argumentCount' => [1]],
3235
'strpos' => ['alternativeName' => 'mb_strpos', 'argumentCount' => [2, 3]],
36+
'strrchr' => ['alternativeName' => 'mb_strrchr', 'argumentCount' => [2]],
37+
'strripos' => ['alternativeName' => 'mb_strripos', 'argumentCount' => [2, 3]],
3338
'strrpos' => ['alternativeName' => 'mb_strrpos', 'argumentCount' => [2, 3]],
34-
'substr' => ['alternativeName' => 'mb_substr', 'argumentCount' => [2, 3]],
39+
'strstr' => ['alternativeName' => 'mb_strstr', 'argumentCount' => [2, 3]],
3540
'strtolower' => ['alternativeName' => 'mb_strtolower', 'argumentCount' => [1]],
3641
'strtoupper' => ['alternativeName' => 'mb_strtoupper', 'argumentCount' => [1]],
37-
'stripos' => ['alternativeName' => 'mb_stripos', 'argumentCount' => [2, 3]],
38-
'strripos' => ['alternativeName' => 'mb_strripos', 'argumentCount' => [2, 3]],
39-
'strstr' => ['alternativeName' => 'mb_strstr', 'argumentCount' => [2, 3]],
40-
'stristr' => ['alternativeName' => 'mb_stristr', 'argumentCount' => [2, 3]],
41-
'strrchr' => ['alternativeName' => 'mb_strrchr', 'argumentCount' => [2]],
42+
'substr' => ['alternativeName' => 'mb_substr', 'argumentCount' => [2, 3]],
4243
'substr_count' => ['alternativeName' => 'mb_substr_count', 'argumentCount' => [2, 3, 4]],
4344
];
4445

@@ -85,8 +86,15 @@ public function isCandidate(Tokens $tokens)
8586
*/
8687
protected function applyFix(\SplFileInfo $file, Tokens $tokens)
8788
{
89+
$functions = array_filter(
90+
self::$functionsMap,
91+
static function ($mapping) {
92+
return \function_exists($mapping['alternativeName']);
93+
}
94+
);
95+
8896
$argumentsAnalyzer = new ArgumentsAnalyzer();
89-
foreach (self::$functions as $functionIdentity => $functionReplacement) {
97+
foreach ($functions as $functionIdentity => $functionReplacement) {
9098
$currIndex = 0;
9199
while (null !== $currIndex) {
92100
// try getting function reference and translate boundaries for humans

tests/Fixer/Alias/MbStrFunctionsFixerTest.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public function testFix($expected, $input = null)
3737

3838
public function provideFixCases()
3939
{
40-
return [
40+
$cases = [
4141
['<?php $x = "strlen";'],
4242
['<?php $x = Foo::strlen("bar");'],
4343
['<?php $x = new strlen("bar");'],
@@ -62,5 +62,18 @@ public function strtolower($a);
6262
}',
6363
],
6464
];
65+
66+
if (\function_exists('mb_str_split')) {
67+
$cases[] = [
68+
'<?php $a = mb_str_split($a);',
69+
'<?php $a = str_split($a);',
70+
];
71+
} else {
72+
$cases[] = [
73+
'<?php $a = str_split($a);',
74+
];
75+
}
76+
77+
return $cases;
6578
}
6679
}

0 commit comments

Comments
 (0)