PHP: Anleitungen und Praxiswissen | Seite 19 | mironsoft Blog
PHP
-
08.04.2025
Mutable Objekte sind eine der haeufigsten Quellen fuer schwer nachvollziehbare Bugs: Ein Wert aendert sich irgendwo im Aufrufgraphen, und niemand weiss mehr genau wo. Readonly Properties verlagern diese Garantie vom Konventions- ins Sprachlevel, seit PHP 8.1 fuer einzelne Properties, seit PHP 8.3 fuer ganze Klassen, und machen Unveraenderlichkeit zu einer Eigenschaft, die der Interpreter selbst durchsetzt statt nur zu dokumentieren.
-
06.04.2025
Wer in Unit-Tests wahllos alles mockt, was mit einer Klasse zusammenhängt, baut Tests, die bei jedem Refactoring brechen, ohne dass sich am Verhalten der Anwendung etwas geändert hat. Die Taxonomie nach Gerard Meszaros unterscheidet Dummy, Stub, Fake, Spy und Mock als fünf klar abgegrenzte Rollen mit unterschiedlichem Zweck, unterschiedlicher Prüflogik und unterschiedlichem Kopplungsgrad an Implementierungsdetails. Dieser Beitrag zeigt die Theorie hinter jedem Test Double anhand handgeschriebener PHP-Implementierungen, unabhängig von einem bestimmten Test-Framework.
-
05.04.2025
Prozess-Parallelisierung mit pcntl erlaubt es PHP CLI-Skripten, echte Betriebssystem-Prozesse zu erzeugen und CPU-gebundene Arbeit tatsächlich gleichzeitig auf mehreren Kernen auszuführen. Wer pcntl_fork, pcntl_wait und Signal-Handling beherrscht, baut Worker-Pools, die Warteschlangen leeren, Batch-Jobs verarbeiten und dabei sauber herunterfahren, statt Zombie-Prozesse zu hinterlassen.
-
04.04.2025
Constructor Property Promotion reduziert die klassische Dreifach-Wiederholung aus Property-Deklaration, Konstruktor-Parameter und Zuweisung im Body auf eine einzige Zeile pro Feld, ohne dabei Typsicherheit, Sichtbarkeit oder readonly-Garantien zu opfern, und macht gerade Value Objects und DTOs spürbar kompakter und wartbarer.
-
02.04.2025
Rector kann ganze Codebasen automatisiert modernisieren, aber ein blind ausgefuehrter Batch-Lauf ueber ein gewachsenes Magento-Modul ist ein Risiko. Aus PhpStorm heraus laesst sich jede Regel gezielt und mit Vorschau anwenden, bevor sie tatsaechlich Dateien veraendert.
-
01.04.2025
Mit debug_backtrace() kann ein PHP-Skript zur Laufzeit den eigenen Aufrufstapel untersuchen und herausfinden, wer eine Funktion an welcher Stelle aufgerufen hat. Diese Form der Metaprogrammierung ist die Grundlage eigener Deprecation-Warnungen, automatischer Logger mit Datei- und Zeilenangabe und einfacher Zugriffskontrollen für interne APIs.
-
28.03.2025
Eigene PHP-Attribute ersetzen Docblock-Annotationen durch eine vom Compiler geparste, typsichere Syntax: Eine mit #[Attribute] markierte Klasse definiert die Struktur, Attribute::TARGET-Flags schränken das erlaubte Ziel ein, und eine ReflectionClass liest die Daten zur Laufzeit aus, ganz ohne fragilen String-Parser für Kommentare.
-
26.03.2025
Wer in PHP Vererbungshierarchien mit Factory-Methoden oder ActiveRecord-Mustern baut, stößt unweigerlich auf den Unterschied zwischen self:: und static::. Late Static Binding löst genau das Problem, dass self:: immer an die Klasse gebunden bleibt, in der die Methode definiert wurde, statt an die Klasse, über die sie tatsächlich aufgerufen wurde.
-
24.03.2025
Ein Trait kopiert echte Methodenrümpfe in eine Klasse hinein, ein Interface verspricht nur, dass diese Methoden existieren, ohne eine einzige Zeile Implementierung mitzuliefern. Wer Traits und Interfaces vermischt oder gegeneinander austauscht, verliert genau die Trennschärfe, die objektorientiertes Design erst robust macht: horizontale Wiederverwendung von Verhalten auf der einen Seite, verbindliche Verträge für Polymorphismus und Testbarkeit auf der anderen.
-
24.03.2025
PHPStan Level max deckt Fehlerklassen auf, die Unit-Tests oft übersehen: falsche Argumenttypen, riskante Null-Zugriffe, unerreichbaren Code. Ein wachsendes Projekt erreicht dieses Level jedoch nicht über Nacht, sondern über Level-Ratcheting, eine gepflegte Baseline-Datei, sauber typisierte Generics und eigene Regeln für projektspezifische Konventionen.