Zoals het er nu naar uit ziet, wordt aan PHP-versie 8 drie nieuwe functies toegevoegd voor het beheren van strings. Het gaat hierbij om de functies str_contains(), str_starts_with(), str_ends_with(). Hoewel deze drie nieuwe functies geen nieuwe functionaliteit brengt, maakt het het programmeren wel een stukje makkelijker en dus schonere code.
str_contains
str_contains ( string $haystack , string $needle ) : bool
De str_contains() functie maakt het mogelijk om te controleren of de opgegeven waarde in de string bestaat. Is dit het geval dan word de waarde true teruggegeven aan het script. Zodat de waarde false.
str_contains("abc", "b"); // true
str_contains("abc", "z"); // false
Vroeger moest er gebruik worden gemaakt van de functie strpos. Echter geeft deze functie de positie terug van de opgegeven waarde. Kan de waarde niet gevonden worden dan word de waarde false teruggegeven.
(strpos("abc", "b") !== false) // true
(strpos("abc", “z”) !== false) // false
Zoals je kunt zien is het voorbeeld hierboven een stuk minder leesbaar en het verteld niets over wat het nu daadwerkelijk doet. Iets wat met de nieuwe functie gelijk duidelijk is.
str_starts_with
str_starts_with ( string $haystack , string $needle ) : bool
De str_start_with functie controleert of de opgegeven waarde aan het begin van de string staat. Is dit het geval dan word de waarde true teruggegeven, anders krijg je false terug.
str_starts_with("abc", "ab") // true
str_starts_with("abc", "xy") // false
Om je een idee te geven hoe de zelfde code werk in oudere PHP versies.
(substr("abc", 0, strlen("ab")) == "ab") // true
(substr("abc", 0, strlen(“xy”)) == “xy”) // false
Code is simpelweg niet te lezen. De functie str_starts_with() verbeterd leesbaarheid enorm.
str_ends_with
str_ends_with ( string $haystack , string $needle ) : bool
De functie str_end_with controllers of de opgegeven waarde aan het eind zit van de string. Is dit het geval dat geeft de functie de waarde true terug, in alle andere gevallen de waarde false. De functie op naar onderstaand voorbeeld te gebruiken.
str_ends_with("abc", "bc") // true
str_ends_with("abc", “xy”) // false
Ter vergelijk pak ik ook nu weer de oude manier erbij.
(substr("abc", -strlen("bc")) == "bc") // true
(substr("abc", -strlen(“xy")) == “xy”) // false
Wanneer kan ik str_contains, str_starts_with en str_ends_with gaan gebruiken?
Deze drie nieuwe functies komen officieel beschikbaar in PHP8 welke naar verwachten word vrijgegeven eind 2020 of begin 2021. Kun je niet zo lang wachten dan is het mogelijk om gebruik te maken van de onderstaande polyfills. Hiermee kun je jouw code alvast een klein beetje voorbereiden op PHP8.
if(!function_exists('str_contains')) { function str_contains($haystack, $needle) { return strpos($haystack, $needle) !== false; } }
if(!function_exists('str_starts_with')) { function str_starts_with($haystack, $needle) { return substr($haystack, 0, strlen($needle)) === $needle; } }
if(!function_exists('str_ends_with')) { function str_ends_with( $haystack, $needle) { return substr($haystack, -strlen($needle)) === $needle; } }
Bronnen:
https://compiledconcepts.com/software-engineering/new-string-functions-in-php-8/
https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions