Code testen, ohne ein Projekt anzufassen
Nicht jede Codezeile verdient eine eigene Datei im Projekt. PhpStorms Scratch Files erlauben schnelle Experimente mit voller Syntax-Hervorhebung und Sprachunterstützung, komplett losgelöst vom aktuellen Projekt, während Scratch Buffers für noch kürzere, unbenannte Zwischenablagen dienen. Wer beide gezielt einsetzt, hält das eigentliche Projekt sauber.
Inhaltsverzeichnis
- 1. Wofür Scratch Files gedacht sind
- 2. Eine neue Scratch File erstellen
- 3. Spracherkennung und Syntax-Highlighting ohne Projektbezug
- 4. Ein schnelles PHP-Experiment in der Praxis
- 5. Scratch Files versus Scratch Buffers
- 6. SQL-Scratches und HTTP-Client-Requests
- 7. Organisation vieler Scratch Files im Alltag
- 8. Versionierung und Sharing: was fehlt
- 9. Grenzen und Vergleich zu Alternativen
- 10. Zusammenfassung
- 11. FAQ
1. Wofür Scratch Files gedacht sind
Scratch Files sind Dateien, die zwar in PhpStorm mit vollem Editor-Komfort bearbeitet werden, aber nicht Teil des aktuell geöffneten Projekts sind und beim Speichern nicht in dessen Verzeichnisstruktur landen. Sie leben in einem eigenen, IDE-verwalteten Bereich außerhalb des Projektbaums, tauchen deshalb nie in git status auf und lassen sich problemlos über beliebig viele Projekte hinweg wiederverwenden, ohne jemals versehentlich mitcommittet zu werden.
Der typische Anwendungsfall ist ein schnelles Experiment, das keinen dauerhaften Platz im Projekt braucht: Ein Kollege schickt einen JSON-Response zur Analyse, eine kurze Regex soll gegen Testdaten geprüft werden, oder eine Idee für eine PHP-Funktion soll isoliert durchdacht werden, bevor sie in die eigentliche Klasse wandert. Für all das eine neue Datei im Projekt anzulegen und später wieder zu löschen, wäre unnötiger Umweg.
2. Eine neue Scratch File erstellen
Die schnellste Route führt über den Shortcut Strg+Alt+Shift+Insert (auf macOS Cmd+Shift+N), der einen Dialog zur Sprachauswahl öffnet: PHP, SQL, JSON, YAML, Markdown und praktisch jede von PhpStorm unterstützte Sprache stehen zur Wahl. Nach der Auswahl öffnet sich sofort ein leerer Editor-Tab mit vollem Syntax-Highlighting, Code-Completion und Inspection, exakt wie in einer echten Projektdatei, nur eben ohne Projektbezug.
Alternativ funktioniert es auch andersherum: Markierten Code aus einer beliebigen Quelle, etwa einer E-Mail oder einem Chat, kann man direkt in einen neuen Scratch-File-Tab einfügen und PhpStorm erkennt die Sprache meist automatisch anhand der Syntax. Über Rechtsklick auf eine markierte Selektion und New, Scratch File lässt sich auch aus einem bestehenden Projekt heraus ein Codeausschnitt gezielt in einen neuen, unabhängigen Scratch-Kontext kopieren.
Neue Scratch File erstellen:
Windows/Linux: Strg+Alt+Shift+Insert
macOS: Cmd+Shift+N
-> Sprache waehlen (PHP, SQL, JSON, YAML, ...)
-> Datei erhaelt automatischen Namen wie scratch_12.php
-> Umbenennen: Rechtsklick im Scratches-Panel -> Rename
Scratches-Panel oeffnen: View -> Tool Windows -> Scratches and Consoles
3. Spracherkennung und Syntax-Highlighting ohne Projektbezug
Weil eine Scratch File über die Sprachauswahl fest einer Dateiendung zugeordnet wird, greifen dieselben Highlighting- und Inspection-Regeln wie bei jeder echten Datei dieses Typs, inklusive PHP-spezifischer Warnungen wie unbenutzten Variablen oder fehlenden Rückgabetypen. Der einzige nennenswerte Unterschied ist, dass projektspezifische Features wie Framework-Autovervollständigung für Magento-Klassen nicht greifen, weil die Scratch File keinen Bezug zum Composer-Autoloading des Projekts hat.
Für reine Sprach-Experimente ohne Framework-Bezug, etwa das Ausprobieren einer neuen PHP-8.4-Funktion oder das Testen eines regulären Ausdrucks, ist das kein Nachteil. Für Magento-spezifische Snippets empfiehlt sich stattdessen ein temporärer Test innerhalb des Projekts selbst oder das nachträgliche Verschieben einer bereits fertig gedachten Scratch File in eine echte Projektdatei, sobald der Autovervollständigungs-Kontext des Frameworks tatsächlich gebraucht wird.
4. Ein schnelles PHP-Experiment in der Praxis
Ein alltägliches Beispiel: Ein Kollege fragt, wie sich eine Preisberechnung mit Rabattstaffeln in PHP am saubersten formulieren lässt. Statt dafür ein neues Projekt oder eine Testdatei im laufenden Magento-Projekt anzulegen, öffnet man eine PHP-Scratch-File, schreibt die Funktion isoliert samt ein paar var_dump-Aufrufen und führt sie direkt über Rechtsklick, Run auf der lokal konfigurierten PHP-CLI aus, ganz ohne Framework-Overhead.
Das Ergebnis lässt sich in Sekunden iterieren, ohne dass am Ende eine Debug-Datei im Projekt vergessen und versehentlich committet wird, ein Fehler, der bei schnell angelegten Testdateien im echten Projektverzeichnis regelmäßig passiert. Sobald die Logik steht, kopiert man sie gezielt in die eigentliche Klasse, während die Scratch File als Referenz für spätere, ähnliche Fragen erhalten bleiben kann.
<?php
declare(strict_types=1);
// scratch_14.php -- schnelles Experiment, kein Projektbezug
function calculateDiscountedPrice(float $price, array $tiers): float
{
foreach ($tiers as $threshold => $discountPercent) {
if ($price >= $threshold) {
return round($price * (1 - $discountPercent / 100), 2);
}
}
return $price;
}
$tiers = [100.0 => 10, 50.0 => 5];
var_dump(calculateDiscountedPrice(120.0, $tiers)); // 108.0
var_dump(calculateDiscountedPrice(60.0, $tiers)); // 57.0
var_dump(calculateDiscountedPrice(20.0, $tiers)); // 20.0
5. Scratch Files versus Scratch Buffers
Neben Scratch Files kennt PhpStorm auch Scratch Buffers, kurzlebige, unbenannte Editor-Tabs, die sich noch schneller öffnen lassen, aber standardmäßig keine dauerhafte Sprachzuordnung besitzen und nach dem Schließen ohne explizites Speichern verloren gehen können. Sie eignen sich für den absolut kürzesten Zwischenschritt, etwa das kurze Umformatieren einer eingefügten Textzeile, während eine echte Scratch File für alles gedacht ist, das über wenige Sekunden Lebensdauer hinausgeht.
In der Praxis nutzen die meisten Entwickler fast ausschließlich Scratch Files, weil deren Persistenz über IDE-Neustarts hinweg und die feste Sprachzuordnung deutlich verlässlicher sind. Scratch Buffers spielen ihre Stärke eher in spezialisierten Kontexten aus, etwa als temporärer Puffer innerhalb bestimmter Plugin-Werkzeuge, die selbst keine dauerhafte Datei anlegen wollen.
6. SQL-Scratches und HTTP-Client-Requests
Besonders nützlich sind Scratch Files mit der Sprache SQL in Kombination mit einer bereits eingerichteten Datenbankverbindung: Eine neue SQL-Scratch-Datei lässt sich direkt gegen eine im Database-Panel hinterlegte Magento-Datenbank ausführen, inklusive Autovervollständigung für Tabellennamen und Spalten, ganz ohne den Umweg über die MySQL-Kommandozeile oder ein separates Admin-Tool wie phpMyAdmin.
Ähnlich praktisch ist eine Scratch File mit der Endung .http für PhpStorms eingebauten HTTP-Client: Eine schnelle Anfrage gegen die Magento-REST- oder GraphQL-API, etwa zum Prüfen eines neuen Endpunkts, lässt sich als Scratch File formulieren, direkt in der IDE ausführen und die Antwort inline betrachten, ohne ein externes Werkzeug wie Postman zu öffnen.
### scratch_http.http -- REST-Endpunkt schnell testen
GET http://magento.test/rest/V1/products/24-MB01
Authorization: Bearer {{admin_token}}
Accept: application/json
### Admin-Token holen (separate Anfrage im selben Scratch-File)
POST http://magento.test/rest/V1/integration/admin/token
Content-Type: application/json
{
"username": "admin",
"password": "admin_password"
}
7. Organisation vieler Scratch Files im Alltag
Wer Scratch Files regelmäßig nutzt, sammelt schnell zwei- oder dreistellige Anzahlen davon an, die automatisch generierten Namen wie scratch_7.php helfen dabei wenig. Ein Blick ins Scratches-and-Consoles-Panel über View, Tool Windows, Scratches and Consoles zeigt alle vorhandenen Dateien in einer eigenen Baumstruktur, in der sich per Rechtsklick, Rename sinnvolle Namen wie preis-rabatt-test.php vergeben lassen, was das spätere Wiederfinden deutlich erleichtert.
Zusätzlich lassen sich im selben Panel Unterordner anlegen, um thematisch verwandte Scratch Files zu gruppieren, etwa magento-api-tests oder sql-abfragen, per Drag-and-Drop im Baum. Wer alte, nicht mehr benötigte Scratch Files konsequent löscht statt sie anzusammeln, hält das Panel übersichtlich, ganz ähnlich wie bei Browser-Tabs, die sich ohne Aufräumen unbemerkt zu Dutzenden ansammeln.
8. Versionierung und Sharing: was fehlt
Scratch Files werden standardmäßig nicht versioniert und liegen außerhalb jedes Git-Repositorys, was ihren größten Vorteil, kein versehentliches Commit, zugleich zu ihrer größten Schwäche macht: Es gibt keine eingebaute Historie über den bereits erwähnten Local-History-Mechanismus hinaus, und der Inhalt lässt sich nicht direkt mit einem Kollegen teilen, ohne ihn manuell zu kopieren. Wer eine Scratch File dauerhaft behalten will, sollte sie gezielt in ein eigenes, kleines Snippets-Repository exportieren.
Über JetBrains Settings Sync lassen sich Scratch Files zwischen mehreren eigenen Rechnern desselben Nutzers spiegeln, sofern Settings Sync aktiviert und die entsprechende Option für Scratches eingeschaltet ist. Für die Weitergabe an Kollegen bleibt dagegen nur der manuelle Weg über Kopieren, eine geteilte Snippet-Sammlung im Team-Wiki oder ein eigenes kleines Repository, in das besonders nützliche Scratch Files bei Bedarf bewusst überführt werden.
9. Grenzen und Vergleich zu Alternativen
Im Vergleich zu Alternativen wie einem separaten Terminal-Tab oder einem eigenen Wegwerf-Projektordner bietet eine Scratch File den entscheidenden Vorteil, den vollen IDE-Komfort direkt neben der eigentlichen Arbeit zu behalten, ohne den Fenster- oder Projektkontext zu wechseln. Genau dieser Komfort, kombiniert mit der fehlenden dauerhaften Versionierung, macht Scratch Files zum idealen Werkzeug für alles, was schnell entstehen und genauso schnell wieder verschwinden darf.
Die folgende Tabelle stellt vier Optionen für schnelle Experimente gegenüber, gemessen an IDE-Komfort, Versionierung und dem Aufwand für das spätere Aufräumen.
| Option | IDE-Komfort | Versionierung | Aufräumaufwand |
|---|---|---|---|
| Scratch File | Voll (Highlighting, Completion) | Nur über Local History | Gering, im Scratches-Panel |
| Neues Wegwerf-Projekt | Voll, aber eigener Kontext | Manuell per Git möglich | Hoch, Ordner muss gelöscht werden |
| Terminal-Snippet | Kaum vorhanden | Keine | Sehr gering, aber flüchtig |
| Datei im echten Projekt | Voll, inkl. Framework-Kontext | Über Projekt-Git | Risiko des versehentlichen Commits |
Mironsoft
PhpStorm-Setup, Docker-Integration und Team-Produktivität
PhpStorm, das für Magento- und PHP-Projekte wirklich optimal läuft?
Wir prüfen bestehende PhpStorm-Setups auf langsame Indizierung, ungenutzte Docker-Integration und fehlende Team-Konventionen und richten eine Konfiguration ein, die von der ersten Sekunde an produktiv ist.
Setup-Review
Indexing, Interpreter und Speicher-Einstellungen für große Magento-Projekte optimieren.
Docker-Integration
Xdebug, PHPUnit und Datenbank-Tools sauber mit dem Docker-Setup verbinden.
Team-Konventionen
Inspection-Profile, Code-Style und Live-Templates projektweit vereinheitlichen.
10. Zusammenfassung
Scratch Files: Das Wichtigste auf einen Blick
Erstellen
Strg+Alt+Shift+Insert (macOS Cmd+Shift+N), Sprache wählen, sofort loslegen.
Kein Projektbezug
Kein git status-Eintrag, kein versehentliches Commit, aber auch kein Framework-Autocomplete.
SQL und HTTP
SQL-Scratches gegen die Datenbankverbindung, .http-Scratches gegen REST/GraphQL.
Organisation
Scratches-Panel nutzen, sinnvoll umbenennen, in Unterordner gruppieren, Altes löschen.