Menu

PHP vs JavaScript: Server, Browser und Node.js

PHP läuft auf dem Server und schickt fertiges HTML an den Browser. JavaScript läuft im Browser, wo es die Seite nach dem Laden verändert, und mit Node.js auf dem Server. Die meisten Websites nutzen beides: PHP für Seiten und APIs, JavaScript für Interaktion.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

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

PHPJavaScript
Läuft indem Webserver (oder einem Terminal)dem Browser und auf dem Server mit Node.js, Deno oder Bun
SiehtDateien, Datenbanken, Umgebung, Geheimnissedie Seite (DOM), Klicks, den Speicher des Browsers
Lebensdauerein Durchlauf pro Anfragesolange die Seite offen ist (Browser) oder ein langer Prozess (Node.js)
Typische AufgabeSeiten bauen, Formulare verarbeiten, APIs, mit der Datenbank redenInteraktivität, Live-Updates, Single-Page-Apps, Node.js-Server
Besucher kann den Code lesenneinja, 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:

AufgabePHPJavaScript
Variable$name = "Ada";let name = "Ada";
Konstanteconst 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ängecount($list), strlen($s)list.length, s.length
Schleifeforeach ($list as $item)for (const item of list)
Arrow Functionfn($x) => $x * 2(x) => x * 2
Ausgabeecho "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.

PHPNode.js
Modellein frischer Durchlauf pro Anfrage, nichts geteiltein lang laufender Prozess mit Event Loop
Warten auf I/Oblockiert diese Anfrage (andere Anfragen laufen in anderen Workern)nicht blockierend, async/await
Gut fürserverseitig gerenderte Websites, CMS, klassische CRUD-AppsEchtzeit-Apps, Websockets, viele inaktive Verbindungen
Hostingjeder Shared Host, PHP-FPMein Node-Prozessmanager oder eine Plattform wie Vercel
Große FrameworksLaravel, Symfony, WordPressExpress, NestJS, Next.js
Eine Sprache für Front- und Backendneinja

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.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S