Development

PHP string contains und startsWith

Wer von anderen Programmiersprachen evtl. gewohnt ist, einen String nach einem Zeichen bzw. Teilstring zu durchsuchen, wird in PHP etwas verwundert sein. Eine entsprechende Funktion wie, strcontains (um der Namensgebung in PHP zu folgen) gibt es nicht.
Natürlich wird man sehr schnell fündig werden und auf strpos stoßen, was eben die in der Überschrift genannten Funktionen vereint.

Hintergrund

Folgender Ausdruck liefert den Integer Wert 5 zurück, da ‘der’ im Text an fünfter Stelle (beginnend mit 0) vor kommt.
strpos('Text der was enthält','der')

Suchte man nach ‘Text’ würde man 0 als Ergebnis erhalten.
Ein nicht vorkommendes Zeichen bzw. Textstück wird mit einem ‘false’ quittiert.

Hier zeigt sich dann aber auch ein kleines Problem: PHP behandelt standardmäßig den booleschen Wert ‘false’ wie ’0′.
Ein einfacher Vergleich der Form
if (strpos($haystack,$needle)==0)
könnte dann ein unerwünschtes Ergebnis liefern, wenn man auf die Position 0 prüfen möchte. Wenn der Text $haystack nicht $needle enthält würde ein false zurück geliefert, was bei einem einfachen Vergleich wie 0 behandelt wird, somit die Bedingung erfüllt!
Würde man erwarten, dass das 0 als false interpretiert wird, würde ein $needle, das genau am Beginn von $haystack steht auch für ein falsche Ergebnis sorgen.
In jedem Fall ist es Wichtig zu Wissen, dass PHP für diesen Fall den “===” Vergleichs-Operator ‘Identisch’ kennt. Wird zwar deutlich in der Dokumentation zu strpos beim Rückgabewert darauf hingewiesen, aber evtl. für manchen erst mal verwirrend. Dieser Operator vergleicht auch den Typen, sodass das boolesche false NICHT dasselbe ist, wie der Integer 0.

Umsetzung

Mit diesem Wissen kann man strpos für die ursprünglich gewünschten Funktionen einsetzen:
startsWith entspricht folgendem Vergleich:
if (strpos($heystack,$needle)===0)

contains entspricht folgenem Vergleich:
if (strpos($haystack,$needle)!==false)

Da ich nach etwas PHP-Abstinenz immer wieder etwas brauche, um genau diesen Sachverhalt zu verstehen, habe ich diese Vergleiche in Funktionen ausgelagert, die einen sinnvollen Namen haben.

strcontains($haystack,$needle) {
  if  (strpos($haystack,$needle)!==false)
    return true;
  else
    return false;
}
strstartswith($haystack,$needle) {
  if  (strpos($haystack,$needle)===0)
    return true;
  else
    return false;
}

Natürlich könnte man diese Zeilen noch etwas komprimierter schreiben, aber so lässt sich das ganze auch später (oder von Anderen) gut lesen und nachvollziehen.

blau-einstellungen

Kosten 1.3 im App Store – Optionsstart für blau.de

Kosten 1.3 ist im App Store erhältlich.

Die Änderungen:

Bugfix:

- Passwort mit Sonderzeichen führt nicht mehr zu Anmeldeproblemen

Features:

- Optionsstartdatum für blau.de festlegbar

An alle blau.de Kunden

ich bitte um Feedback zur neuen Funktion. Die Funktion Optionsstart wurde ausgiebig getestet. Falls dennoch Probleme bei der Auswertung auftreten, bitte mit mir Kontakt aufnehmen.