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

Vond je dit een leuk blog artikel dan is een reactie altijd welkom: Klik hier om een reactie achter te laten.

Abonneer je op dit blog d.m.v. e-mail

Meld je hieronder aan met jouw e-mailadres en ontvang als eerste een mailtje wanneer er een nieuw artikel online gaat op mijn blog.