The expression return self::str_split($str) returns an array which contains values of type array|string[] which are incompatible with the documented value type string.
Loading history...
503
}
504
505
/**
506
* This method will auto-detect your server environment for UTF-8 support.
507
*
508
* @return true|null
509
*
510
* @internal <p>You don't need to run it manually, it will be triggered if it's needed.</p>
511
*/
512
5
public static function checkForSupport()
513
{
514
5
if (!isset(self::$SUPPORT['already_checked_via_portable_utf8'])) {
The expression return self::str_ireplac...ch, $replacement, $str) could return the type string[] which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
5633
}
5634
5635
/**
5636
* Replaces all occurrences of $search in $str by $replacement.
5637
*
5638
* @param string $str <p>The input string.</p>
5639
* @param array $search <p>The elements to search for.</p>
5640
* @param array|string $replacement <p>The string to replace with.</p>
5641
* @param bool $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
The expression return self::str_ireplac...ch, $replacement, $str) could return the type string[] which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
5659
}
5660
5661
/**
5662
* Replace the diamond question mark (�) and invalid-UTF8 chars with the replacement.
It seems like you do not handle an error condition for mb_substitute_character(). This can introduce security issues, and is generally not recommended.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-unhandled annotation
If you suppress an error, we recommend checking for the error condition explicitly:
// For example instead of@mkdir($dir);// Better useif(@mkdir($dir)===false){thrownew\RuntimeException('The directory '.$dir.' could not be created.');}
Loading history...
5703
// the polyfill maybe return false, so cast to string
The expression return self::str_split($str, $length, $clean_utf8) returns an array which contains values of type array|string[] which are incompatible with the documented value type string.
Loading history...
5867
}
5868
5869
/**
5870
* alias for "UTF8::str_starts_with()"
5871
*
5872
* @param string $haystack
5873
* @param string $needle
5874
*
5875
* @psalm-pure
5876
*
5877
* @return bool
5878
*
5879
* @see UTF8::str_starts_with()
5880
* @deprecated <p>please use "UTF8::str_starts_with()"</p>
5881
*/
5882
1
public static function str_begins(string $haystack, string $needle): bool
5883
{
5884
1
return self::str_starts_with($haystack, $needle);
5885
}
5886
5887
/**
5888
* Returns a camelCase version of the string. Trims surrounding spaces,
5889
* capitalizes letters following digits, spaces, dashes and underscores,
5890
* and removes spaces, dashes, as well as underscores.
The expression return self::substr_repl...)self::strlen($search)) could return the type string[] which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
8048
2
$subject,
8049
2
$replace,
8050
2
$pos,
8051
2
(int) self::strlen($search)
8052
);
8053
}
8054
8055
2
return $subject;
8056
}
8057
8058
/**
8059
* Replace the last "$search"-term with the "$replace"-term.
The expression return self::substr_repl...)self::strlen($search)) could return the type string[] which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
8082
2
$subject,
8083
2
$replace,
8084
2
$pos,
8085
2
(int) self::strlen($search)
8086
);
8087
}
8088
8089
2
return $subject;
8090
}
8091
8092
/**
8093
* Shuffles all the characters in the string.
8094
*
8095
* INFO: uses random algorithm which is weak for cryptography purposes
It seems like $array can also be of type null; however, parameter $array of arsort() does only seem to accept array, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-type annotation
It seems like $array can also be of type null; however, parameter $array of asort() does only seem to accept array, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-type annotation
8289
\asort(/** @scrutinizer ignore-type */ $array);
Loading history...
8290
}
8291
8292
2
return self::string($array);
8293
}
8294
8295
/**
8296
* Convert a string to an array of Unicode characters.
The expression return self::str_split_a...ry_to_use_mb_functions) returns the type array<mixed,string[]> which is incompatible with the documented return type string[].
throw new \InvalidArgumentException('The number of elements for each array isn\'t equal or the arrays are empty: (from: ' . \print_r($from, true) . ' | to: ' . \print_r($to, true) . ')');
It seems like $to can also be of type array<mixed,array> and array<mixed,string[]>; however, parameter $replace of str_replace() does only seem to accept string|string[], maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-type annotation
The expression $length of type integer|null is loosely compared to false; this is ambiguous if the integer can be 0. You might want to explicitly use === null instead.
In PHP, under loose comparison (like ==, or !=, or switch conditions),
values of different types might be equal.
For integer values, zero is a special case, in particular the following
results might be unexpected:
0==false// true0==null// true123==false// false123==null// false// It is often better to use strict comparison0===false// false0===null// false
Loading history...
12095
return '';
12096
}
12097
12098
// impossible
12099
4
if ($offset && $offset > $str_length) {
12100
return '';
12101
}
12102
12103
4
$length = $length ?? (int) $str_length;
12104
12105
if (
12106
4
$encoding !== 'UTF-8'
12107
&&
12108
4
self::$SUPPORT['mbstring'] === false
12109
) {
12110
/**
12111
* @psalm-suppress ImpureFunctionCall - is is only a warning
It seems like $str can also be of type false; however, parameter $data of utf8_encode() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the ignore-type annotation
$class_array was never initialized. Although not strictly required by PHP, it is generally a good practice to add $class_array = array(); before regardless.