Menu

PHP ou JavaScript: servidor, navegador e Node.js

O PHP roda no servidor e envia HTML pronto ao navegador. O JavaScript roda no navegador, onde altera a página depois que ela carrega, e no servidor com Node.js. A maioria dos sites usa os dois: PHP para montar páginas e APIs, JavaScript para a interação.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

O PHP roda no servidor: monta a página, envia o HTML pronto e para. O JavaScript roda no navegador do visitante, onde reage a cliques e altera a página depois que ela carregou; com Node.js ele também pode rodar no servidor. Então os dois são menos rivais do que parceiros: um site típico usa PHP (ou Node.js) no servidor e JavaScript no navegador.

Este código PHP roda no servidor. O navegador recebe só o que ele imprime, e a aba Page mostra esse resultado:

Olhe a aba Output: não sobrou nada de PHP, só HTML. A mesma lista montada por JavaScript no navegador fica assim:

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

A versão em PHP envia uma página completa, que mecanismos de busca e celulares lentos leem na hora. A versão em JavaScript pode atualizar a lista depois sem recarregar, por exemplo quando o visitante remove um item.

Onde cada linguagem roda

PHPJavaScript
Roda emno servidor web (ou num terminal)no navegador, e no servidor com Node.js, Deno ou Bun
Enxergaarquivos, bancos de dados, ambiente, segredosa página (DOM), cliques, o armazenamento do navegador
Tempo de vidauma execução por requisiçãoenquanto a página estiver aberta (navegador), ou um processo longo (Node.js)
Trabalho típicomontar páginas, tratar formulários, APIs, falar com o bancointeratividade, atualizações ao vivo, single-page apps, servidores Node.js
O visitante pode ler o códigonãosim, no navegador

A última linha importa para a segurança: tudo o que está no JavaScript do navegador fica visível ao visitante, então senhas, chaves de API e verificações de preço ficam no servidor.

Sintaxe lado a lado

As duas linguagens se parecem porque ambas herdam do C: chaves, if, for, while, function, return. As diferenças estão nos detalhes:

TarefaPHPJavaScript
Variável$name = "Ada";let name = "Ada";
Constanteconst MAX = 10;const MAX = 10;
Juntar strings"Hi " . $name"Hi " + name
Template string"Hi $name"`Hi ${name}`
Lista["a", "b"]["a", "b"]
Chave/valor["id" => 1]{ id: 1 }
Tamanhocount($list), strlen($s)list.length, s.length
Loopforeach ($list as $item)for (const item of list)
Arrow functionfn($x) => $x * 2(x) => x * 2
Imprimirecho "Hi";console.log("Hi");

Aqui está uma função com callback em PHP:

E em JavaScript, onde map e filter são métodos do 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(", "));

O operador +: a armadilha clássica

No JavaScript, + tanto soma números quanto junta strings, então uma string em qualquer lugar transforma a soma em concatenação. O PHP separa as duas coisas: + sempre soma e . sempre junta.

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

As duas linguagens também têm o == frouxo e o === estrito. O conselho é o mesmo nas duas: use ===, a menos que você queira comparar tipos diferentes.

Passar dados do PHP para o JavaScript

O PHP roda primeiro, então pode escrever dados direto na página para o JavaScript do navegador usar. json_encode transforma um array PHP em JavaScript válido:

A aba Output mostra o script gerado com os dados já preenchidos. A flag JSON_HEX_TAG escapa < e >, então um valor contendo </script> não consegue encerrar o script antes da hora. Mais sobre as opções em json_encode.

O caminho inverso passa por HTTP: o JavaScript do navegador chama fetch("/api/cart.php"), o script PHP roda e responde com 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 ou Node.js no servidor

Quando o JavaScript roda no servidor com Node.js, a comparação vira uma escolha de verdade.

PHPNode.js
Modelouma execução nova por requisição, nada compartilhadoum processo de longa duração com event loop
Espera por I/Obloqueia aquela requisição (as outras rodam em outros workers)não bloqueante, async/await
Bom parasites renderizados no servidor, CMSs, apps CRUD clássicosapps em tempo real, websockets, muitas conexões ociosas
Hospedagemqualquer hospedagem compartilhada, PHP-FPMum gerenciador de processos Node ou uma plataforma como a Vercel
Grandes frameworksLaravel, Symfony, WordPressExpress, NestJS, Next.js
Uma linguagem no front e no backnãosim

O modelo do PHP perdoa bastante: um bug ou vazamento de memória afeta só uma requisição, e cada requisição começa limpa. O modelo do Node pode manter estado e conexões abertas, o que combina com chat e dashboards ao vivo, mas uma falha ou um loop bloqueante afeta todos os usuários daquele processo.

Qual aprender

Você vai precisar de JavaScript em qualquer página web interativa, porque é a única linguagem que os navegadores executam. A questão é o que roda no servidor:

  • Aprenda PHP em seguida se você quer trabalhar com WordPress, Laravel ou os muitos sites PHP que já existem, ou se quer o jeito mais simples de colocar um site dinâmico numa hospedagem barata. Comece por o que é PHP.
  • Fique no JavaScript (Node.js) se você quer uma linguagem para a stack inteira ou está criando recursos em tempo real.

Um caminho comum é HTML e CSS, depois JavaScript no navegador, depois uma linguagem de servidor. Qualquer que seja a linguagem de servidor escolhida, formulários, sessões, bancos de dados e APIs JSON funcionam com as mesmas ideias de HTTP, então o conhecimento se transfere.

Perguntas frequentes

JavaScript pode substituir o PHP?

No servidor, sim: o Node.js (com Express, Next.js ou parecidos) faz os mesmos trabalhos que o PHP. No navegador, o PHP não substitui o JavaScript de jeito nenhum, porque os navegadores só executam JavaScript. Por isso muitos sites usam PHP ou Node no servidor e JavaScript no navegador.

Como passo uma variável PHP para o JavaScript?

Imprima-a na página como JSON: <script>const user = <?= json_encode($user, JSON_HEX_TAG) ?>;</script>. json_encode gera JavaScript válido para strings, números, arrays e objetos, e JSON_HEX_TAG impede que um </script> dentro dos dados feche a tag.

O JavaScript pode chamar uma função PHP?

Não diretamente, porque o PHP roda no servidor e o JavaScript no navegador. O JavaScript envia uma requisição HTTP com fetch('/api.php?id=3'), o script PHP roda e imprime uma resposta (normalmente JSON), e o JavaScript a lê.

PHP é mais rápido que Node.js?

Depende da carga de trabalho. O Node.js lida bem com muitas conexões lentas simultâneas (chat, websockets) graças ao event loop. O PHP 8 com OPcache é rápido para páginas comuns de requisição e resposta. Na maioria dos sites o gargalo é o banco de dados, não a linguagem.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR