Menu

PHP vs JavaScript: server, browser e Node.js

PHP gira sul server e invia al browser HTML già pronto. JavaScript gira nel browser, dove modifica la pagina dopo il caricamento, e sul server con Node.js. La maggior parte dei siti li usa entrambi: PHP per costruire pagine e API, JavaScript per l'interazione.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

PHP gira sul server: costruisce la pagina, invia l'HTML finito e si ferma. JavaScript gira nel browser del visitatore, dove reagisce ai clic e modifica la pagina dopo il caricamento; con Node.js può girare anche sul server. Quindi i due sono più partner che rivali: un sito tipico usa PHP (o Node.js) sul server e JavaScript nel browser.

Questo codice PHP gira sul server. Il browser riceve solo ciò che stampa, e la scheda Page mostra quel risultato:

Guarda la scheda Output: non c'è più traccia di PHP, solo HTML. La stessa lista costruita da JavaScript nel browser ha questo aspetto:

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);
}

La versione PHP invia una pagina completa, che i motori di ricerca e i telefoni lenti leggono subito. La versione JavaScript può aggiornare la lista più tardi senza ricaricare, per esempio quando il visitatore rimuove un elemento.

Dove gira ciascun linguaggio

PHPJavaScript
Gira inil web server (o un terminale)il browser, e il server con Node.js, Deno o Bun
Vedefile, database, ambiente, segretila pagina (DOM), i clic, lo storage del browser
Durataun'esecuzione per richiestafinché la pagina è aperta (browser), oppure un unico processo lungo (Node.js)
Lavoro tipicocostruire pagine, gestire form, API, parlare con il databaseinterattività, aggiornamenti live, single-page app, server Node.js
Il visitatore può leggere il codicenosì, nel browser

L'ultima riga conta per la sicurezza: tutto ciò che sta nel JavaScript del browser è visibile al visitatore, quindi password, chiavi API e controlli sui prezzi vanno sul server.

Sintassi a confronto

I due linguaggi si somigliano perché entrambi prendono da C: graffe, if, for, while, function, return. Le differenze stanno nei dettagli:

OperazionePHPJavaScript
Variabile$name = "Ada";let name = "Ada";
Costanteconst MAX = 10;const MAX = 10;
Unire stringhe"Hi " . $name"Hi " + name
Stringa con variabili"Hi $name"`Hi ${name}`
Lista["a", "b"]["a", "b"]
Chiave/valore["id" => 1]{ id: 1 }
Lunghezzacount($list), strlen($s)list.length, s.length
Cicloforeach ($list as $item)for (const item of list)
Arrow functionfn($x) => $x * 2(x) => x * 2
Stampaecho "Hi";console.log("Hi");

Ecco una funzione con una callback in PHP:

E in JavaScript, dove map e filter sono metodi dell'array:

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(", "));

L'operatore +: la trappola classica

In JavaScript + somma i numeri e unisce le stringhe, quindi una stringa da qualche parte trasforma la somma in concatenazione. PHP tiene separate le due cose: + somma sempre e . unisce sempre.

console.log("10" + 5);  // "105"
console.log("10" - 5);  // 5
console.log("3" * "4"); // 12
console.log(0.1 + 0.2 === 0.3); // false

Entrambi i linguaggi hanno anche == non stretto e === stretto. Il consiglio è lo stesso in entrambi: usa === a meno che tu non voglia confrontare tipi diversi.

Passare dati da PHP a JavaScript

PHP gira per primo, quindi può scrivere i dati direttamente nella pagina perché il JavaScript del browser li usi. json_encode trasforma un array PHP in JavaScript valido:

La scheda Output mostra lo script generato con i dati già inseriti. Il flag JSON_HEX_TAG fa l'escape di < e >, così un valore che contiene </script> non può chiudere lo script prima del tempo. Altre opzioni in json_encode.

La direzione opposta passa da HTTP: il JavaScript del browser chiama fetch("/api/cart.php"), lo script PHP gira e risponde con 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 sul server

Quando JavaScript gira sul server tramite Node.js, il confronto diventa una vera scelta.

PHPNode.js
Modelloun'esecuzione nuova per richiesta, niente di condivisoun unico processo sempre attivo con un event loop
Attesa dell'I/Oblocca quella richiesta (le altre girano in altri worker)non bloccante, async/await
Bravo insiti renderizzati sul server, CMS, classiche app CRUDapp in tempo reale, websocket, molte connessioni inattive
Hostingqualsiasi hosting condiviso, PHP-FPMun process manager per Node o una piattaforma come Vercel
Framework principaliLaravel, Symfony, WordPressExpress, NestJS, Next.js
Un solo linguaggio per front e backnosì

Il modello di PHP perdona: un bug o una perdita di memoria colpisce solo una richiesta, e ogni richiesta parte pulita. Il modello di Node può tenere aperti stato e connessioni, il che si adatta a chat e dashboard live, ma un crash o un ciclo bloccante colpisce tutti gli utenti di quel processo.

Quale imparare

JavaScript ti servirà per qualsiasi pagina web interattiva, perché è l'unico linguaggio che i browser eseguono. La domanda è cosa gira sul server:

  • Impara PHP come passo successivo se vuoi lavorare con WordPress, Laravel o i tanti siti PHP esistenti, oppure se vuoi il modo più semplice per mettere un sito dinamico su un hosting economico. Inizia da cos'è PHP.
  • Resta su JavaScript (Node.js) se vuoi un solo linguaggio per tutto lo stack o stai costruendo funzionalità in tempo reale.

Un percorso comune è HTML e CSS, poi JavaScript nel browser, poi un linguaggio lato server. Qualunque linguaggio lato server tu scelga, form, sessioni, database e API JSON si basano sulle stesse idee di HTTP, quindi le conoscenze si trasferiscono.

Domande frequenti

JavaScript può sostituire PHP?

Sul server sì: Node.js (con Express, Next.js o simili) fa gli stessi lavori di PHP. Nel browser PHP non può sostituire JavaScript in alcun modo, perché i browser eseguono solo JavaScript. Per questo molti siti usano PHP o Node sul server e JavaScript nel browser.

Come passo una variabile PHP a JavaScript?

Stampala nella pagina come JSON: <script>const user = <?= json_encode($user, JSON_HEX_TAG) ?>;</script>. json_encode produce JavaScript valido per stringhe, numeri, array e oggetti, e JSON_HEX_TAG impedisce a un </script> dentro i dati di chiudere il tag.

JavaScript può chiamare una funzione PHP?

Non direttamente, perché PHP gira sul server e JavaScript nel browser. JavaScript invia una richiesta HTTP con fetch('/api.php?id=3'), lo script PHP gira e stampa una risposta (di solito JSON), e JavaScript la legge.

PHP è più veloce di Node.js?

Dipende dal carico. Node.js gestisce bene molte connessioni lente simultanee (chat, websocket) grazie al suo event loop. PHP 8 con OPcache è veloce per le normali pagine a richiesta e risposta. Per la maggior parte dei siti il collo di bottiglia è il database, non il linguaggio.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA