PHP läuft auf dem Server: Es baut die Seite, schickt das fertige HTML und hört dann auf. JavaScript läuft im Browser des Besuchers, wo es auf Klicks reagiert und die Seite nach dem Laden verändert; mit Node.js läuft es auch auf dem Server. Die beiden sind also weniger Rivalen als Partner: Eine typische Website nutzt PHP (oder Node.js) auf dem Server und JavaScript im Browser.
Dieser PHP-Code läuft auf dem Server. Der Browser bekommt nur, was er ausgibt, und der Tab Page zeigt dieses Ergebnis:
Schau dir den Tab Output an: Darin ist kein PHP mehr, nur HTML. Dieselbe Liste, von JavaScript im Browser gebaut, sieht so aus:
const products = [
{ name: "Keyboard", price: 49 },
{ name: "Mouse", price: 19 },
{ name: "Monitor", price: 189 },
];
const ul = document.querySelector("#cart"); // an empty <ul id="cart"> in the HTML
for (const p of products) {
const li = document.createElement("li");
li.textContent = `${p.name}: $${p.price}`;
ul.append(li);
}
Die PHP-Version schickt eine vollständige Seite, die Suchmaschinen und langsame Handys sofort lesen. Die JavaScript-Version kann die Liste später ohne Neuladen aktualisieren, etwa wenn der Besucher einen Eintrag entfernt.
Wo welche Sprache läuft
| PHP | JavaScript | |
|---|---|---|
| Läuft in | dem Webserver (oder einem Terminal) | dem Browser und auf dem Server mit Node.js, Deno oder Bun |
| Sieht | Dateien, Datenbanken, Umgebung, Geheimnisse | die Seite (DOM), Klicks, den Speicher des Browsers |
| Lebensdauer | ein Durchlauf pro Anfrage | solange die Seite offen ist (Browser) oder ein langer Prozess (Node.js) |
| Typische Aufgabe | Seiten bauen, Formulare verarbeiten, APIs, mit der Datenbank reden | Interaktivität, Live-Updates, Single-Page-Apps, Node.js-Server |
| Besucher kann den Code lesen | nein | ja, im Browser |
Die letzte Zeile ist für die Sicherheit wichtig: Alles im JavaScript des Browsers ist für den Besucher sichtbar, also gehören Passwörter, API-Schlüssel und Preisprüfungen auf den Server.
Syntax im direkten Vergleich
Die beiden Sprachen sehen sich ähnlich, weil beide von C abstammen: geschweifte Klammern, if, for, while, function, return. Die Unterschiede stecken in den Details:
| Aufgabe | PHP | JavaScript |
|---|---|---|
| Variable | $name = "Ada"; | let name = "Ada"; |
| Konstante | const MAX = 10; | const MAX = 10; |
| Strings verbinden | "Hi " . $name | "Hi " + name |
| Template-String | "Hi $name" | `Hi ${name}` |
| Liste | ["a", "b"] | ["a", "b"] |
| Schlüssel/Wert | ["id" => 1] | { id: 1 } |
| Länge | count($list), strlen($s) | list.length, s.length |
| Schleife | foreach ($list as $item) | for (const item of list) |
| Arrow Function | fn($x) => $x * 2 | (x) => x * 2 |
| Ausgabe | echo "Hi"; | console.log("Hi"); |
Hier ist eine Funktion mit Callback in PHP:
Und in JavaScript, wo map und filter Methoden des Arrays sind:
const prices = [12.5, 8, 30, 4.25];
const withTax = prices.map((p) => Math.round(p * 1.2 * 100) / 100);
const cheap = withTax.filter((p) => p < 15);
console.log(withTax.join(", "));
console.log("Under 15: " + cheap.join(", "));
Der Operator +: die klassische Falle
In JavaScript addiert + Zahlen und verbindet Strings, sodass ein String an beliebiger Stelle die Addition in eine Verkettung verwandelt. PHP hält beides auseinander: + addiert immer und . verbindet immer.
console.log("10" + 5); // "105"
console.log("10" - 5); // 5
console.log("3" * "4"); // 12
console.log(0.1 + 0.2 === 0.3); // false
Beide Sprachen haben außerdem das lockere == und das strikte ===. Der Rat ist in beiden derselbe: Verwende ===, außer du willst bewusst über Typen hinweg vergleichen.
Daten von PHP an JavaScript übergeben
PHP läuft zuerst und kann deshalb Daten direkt in die Seite schreiben, die das JavaScript im Browser dann verwendet. json_encode macht aus einem PHP-Array gültiges JavaScript:
Der Tab Output zeigt das erzeugte Skript mit bereits eingesetzten Daten. Das Flag JSON_HEX_TAG escapt < und >, sodass ein Wert mit </script> das Skript nicht vorzeitig beenden kann. Mehr zu den Optionen unter json_encode.
Die andere Richtung läuft über HTTP: Das JavaScript im Browser ruft fetch("/api/cart.php") auf, das PHP-Skript läuft und antwortet mit JSON:
<?php
// api/cart.php
header('Content-Type: application/json');
echo json_encode(['items' => 3, 'total' => 257]);
const res = await fetch("/api/cart.php");
const cart = await res.json();
console.log(cart.total); // 257
PHP vs Node.js auf dem Server
Wenn JavaScript über Node.js auf dem Server läuft, wird der Vergleich zu einer echten Entscheidung.
| PHP | Node.js | |
|---|---|---|
| Modell | ein frischer Durchlauf pro Anfrage, nichts geteilt | ein lang laufender Prozess mit Event Loop |
| Warten auf I/O | blockiert diese Anfrage (andere Anfragen laufen in anderen Workern) | nicht blockierend, async/await |
| Gut für | serverseitig gerenderte Websites, CMS, klassische CRUD-Apps | Echtzeit-Apps, Websockets, viele inaktive Verbindungen |
| Hosting | jeder Shared Host, PHP-FPM | ein Node-Prozessmanager oder eine Plattform wie Vercel |
| Große Frameworks | Laravel, Symfony, WordPress | Express, NestJS, Next.js |
| Eine Sprache für Front- und Backend | nein | ja |
PHPs Modell verzeiht viel: Ein Bug oder ein Speicherleck betrifft nur eine Anfrage, und jede Anfrage startet sauber. Nodes Modell kann Zustand und Verbindungen offen halten, was zu Chats und Live-Dashboards passt, aber ein Absturz oder eine blockierende Schleife trifft jeden Nutzer dieses Prozesses.
Was du lernen solltest
JavaScript brauchst du für jede interaktive Webseite, denn es ist die einzige Sprache, die Browser ausführen. Die Frage ist, was auf dem Server läuft:
- Lern als Nächstes PHP, wenn du mit WordPress, Laravel oder den vielen bestehenden PHP-Websites arbeiten willst oder den einfachsten Weg suchst, eine dynamische Website auf günstiges Hosting zu bringen. Fang an mit was PHP ist.
- Bleib bei JavaScript (Node.js), wenn du eine Sprache für den ganzen Stack willst oder Echtzeit-Features baust.
Ein üblicher Weg ist HTML und CSS, dann JavaScript im Browser, dann eine Serversprache. Egal welche Serversprache du wählst: Formulare, Sessions, Datenbanken und JSON-APIs beruhen auf denselben HTTP-Ideen, das Wissen lässt sich also übertragen.
Häufig gestellte Fragen
Kann JavaScript PHP ersetzen?
Auf dem Server ja: Node.js (mit Express, Next.js oder Ähnlichem) erledigt dieselben Aufgaben wie PHP. Im Browser kann PHP JavaScript überhaupt nicht ersetzen, weil Browser nur JavaScript ausführen. Deshalb nutzen viele Websites PHP oder Node auf dem Server und JavaScript im Browser.
Wie übergebe ich eine PHP-Variable an JavaScript?
Gib sie als JSON in die Seite aus: <script>const user = <?= json_encode($user, JSON_HEX_TAG) ?>;</script>. json_encode erzeugt gültiges JavaScript für Strings, Zahlen, Arrays und Objekte, und JSON_HEX_TAG verhindert, dass ein </script> in den Daten das Tag schließt.
Kann JavaScript eine PHP-Funktion aufrufen?
Nicht direkt, denn PHP läuft auf dem Server und JavaScript im Browser. JavaScript schickt eine HTTP-Anfrage mit fetch('/api.php?id=3'), das PHP-Skript läuft und gibt eine Antwort aus (meist JSON), und JavaScript liest sie.
Ist PHP schneller als Node.js?
Das hängt von der Last ab. Node.js kommt dank seiner Event Loop gut mit vielen gleichzeitigen langsamen Verbindungen zurecht (Chat, Websockets). PHP 8 mit OPcache ist schnell für normale Seiten nach dem Muster Anfrage und Antwort. Bei den meisten Websites ist die Datenbank der Engpass, nicht die Sprache.