Code, den du sofort einsetzen kannst
Praktische Code-Snippets aus meiner täglichen Arbeit — kopieren, verstehen, einsetzen.
str_contains, str_starts_with, str_ends_with – Schluss mit strpos !== false
Enthält dieser Text das Wort? Fängt die Datei mit https an? Das ging jahrelang nur über strpos und einen Vergleich, den man leicht falsch schreibt. Seit PHP 8 gibt es drei Funktionen, die genau das sagen, was sie tun.
Eigene Exceptions in PHP – Fehler, die man auseinanderhalten kann
catch (Exception $e) fängt alles – auch das, was du gar nicht behandeln wolltest. Mit ein paar eigenen Exception-Klassen wird aus „irgendwas ging schief" eine Fehlermeldung, mit der der Nutzer etwas anfangen kann.
Arrays sortieren in PHP – usort und der Spaceship-Operator
Eine Liste nach Datum, dann nach Name, absteigend – ohne Bibliothek und ohne if-Kaskade. usort plus <=> macht daraus zwei Zeilen, die man auch in einem halben Jahr noch versteht.
readonly und Constructor Promotion – Wertobjekte in PHP ohne Boilerplate
Früher waren das dreißig Zeilen: Eigenschaften deklarieren, Konstruktor schreiben, alles zuweisen, Getter dazu. Seit PHP 8.1 ist derselbe unveränderliche Wertetyp eine einzige Zeile – und niemand kann ihn nachträglich kaputt machen.
Generatoren in PHP – eine 2-GB-Datei lesen, ohne den Speicher zu sprengen
file() lädt die ganze Datei in ein Array – bei großen Dateien ist danach der Speicher voll und das Skript tot. Mit yield gibst du Zeile für Zeile heraus und brauchst konstant wenig Speicher, egal wie groß die Datei ist.
ModalBottomSheet in Material 3 – das Blatt, das von unten hereinfährt
Ein Menü, eine Detailansicht, eine Auswahl – auf dem Handy kommt so etwas von unten. Material 3 bringt das fertig mit, inklusive Wischgeste und Verdunkelung. Man muss nur wissen, wie man es richtig schließt.
CompositionLocal – Werte durch den Compose-Baum reichen, ohne sie durchzuschleifen
Wenn ein Wert durch acht Composables durchgereicht wird, nur damit ihn das neunte benutzen kann, ist etwas schief. CompositionLocal löst das – aber nur für eine sehr bestimmte Sorte von Werten.
Fehler in Flows abfangen – catch, retry und ein sinnvoller Fallback
Ein try/catch um einen Flow herum fängt nichts. Fehler laufen im Flow selbst mit und werden dort behandelt – mit catch für die Ausgabe und retry für den zweiten Versuch bei Netzproblemen.
WorkManager – Arbeit, die auch läuft, wenn die App zu ist
Daten hochladen, nachts synchronisieren, eine Erinnerung schicken: Sobald etwas laufen soll, während die App geschlossen ist, ist WorkManager das richtige Werkzeug – und nicht ein Thread, den das System sowieso abräumt.
Berechtigungen und Foto-Auswahl in Compose – rememberLauncherForActivityResult
Kamera-Erlaubnis abfragen, ein Bild aus der Galerie holen, ein Dokument öffnen: Dafür gibt es in Compose genau einen Weg, und er ist erfreulich kurz. onActivityResult und startActivityForResult brauchst du nie wieder.
EXISTS statt IN – Unterabfragen, die auch mit NULL richtig rechnen
"Zeig mir alle Kunden, die schon mal bestellt haben" – dafür greifen die meisten zu IN (SELECT …). Das funktioniert, bis eine einzige NULL in der Unterabfrage steht: dann liefert NOT IN plötzlich gar nichts mehr. EXISTS hat dieses Problem nicht.
rememberUpdatedState in Compose – wenn dein Callback im Effekt einfriert
Ein LaunchedEffect mit key1 = Unit startet genau einmal – und hält damit für immer die Lambda-Referenz vom ersten Durchlauf fest. Klickt der Nutzer später etwas anderes an, passiert das Falsche. rememberUpdatedState löst genau das.