PHP Versões
O PHP muda todo ano: a cada novembro sai uma versão nova, com recursos novos, e as versões antigas vão deixando de receber correções. Nesta aula você vai aprender a ler um número de versão, descobrir qual PHP está instalado, saber até quando cada versão é segura e entender o selo PHP 8.4+ que aparece nas aulas.
- O que quer dizer cada parte de
8.5.8. - Descobrir a versão no terminal (
php -v) e dentro do código (PHP_VERSION). - O ciclo de vida de uma versão: suporte ativo, só segurança e fim de vida.
- Quais versões estão em uso em 2026 e qual escolher.
- O que cada versão, do 7.0 ao 8.5, trouxe de novo (em resumo).
- O que fazer quando um código usa um recurso mais novo que o seu PHP.
A ideia: modelos de carro
Um fabricante de carros lança um modelo novo por ano. O modelo 2025 continua rodando quando sai o 2026, e a oficina autorizada ainda troca peças dele por alguns anos. Depois de um tempo, a fábrica para de dar assistência: o carro anda, mas se quebrar, é por sua conta.
Com o PHP é igual. Cada versão recebe correções por quatro anos e depois é abandonada. Um site que roda num PHP abandonado continua funcionando, mas, se alguém descobrir uma falha de segurança nele, ninguém vai consertar.
Lendo um número de versão
A versão do PHP usado no laboratório do guia é 8.5.8. São três números separados por pontos:
- 8
- A versão maior (major). Muda raramente (o PHP 7 saiu em 2015, o 8 em 2020) e pode trazer mudanças que quebram código antigo.
- .5
- A versão menor (minor). Sai uma por ano, em novembro, com recursos novos. É o que as pessoas chamam de "o PHP 8.5". Código escrito para o 8.4 quase sempre roda no 8.5 sem mudança.
- .8
- A versão de correção (patch ou release). Sai mais ou menos a cada mês, só com consertos de falhas e de segurança, sem recursos novos. Atualizar de
8.5.7para8.5.8é sempre seguro e recomendado.
Por isso o guia fala em "PHP 8.5" e não liga para o último número: o laboratório tem o 8.5.8 e o editor do navegador tem o 8.5.10, e os dois se comportam igual em tudo o que as aulas mostram.
Descobrindo a sua versão: php -v
No terminal, a opção -v (de version, "versão") mostra qual PHP está instalado:
$ php -v
PHP 8.5.8 (cli) (built: Jul 7 2026 05:21:52) (NTS gcc 14.2.0)
Copyright (c) The PHP Group
Built by static-php-cli 2.8.6
Zend Engine v4.5.8, Copyright (c) Zend Technologies
with Zend OPcache v8.5.8, Copyright (c), by Zend Technologies
Parece muita informação, mas só a primeira linha importa no dia a dia:
- PHP 8.5.8
- A versão.
- (cli)
- Este é o PHP de linha de comando (veja Como o PHP Funciona).
- (built: Jul 7 2026 05:21:52)
- Quando este PHP foi compilado (montado a partir do código-fonte).
- (NTS gcc 14.2.0)
- NTS = Non Thread Safe, o tipo comum, usado no Linux e no Windows com PHP-FPM ou na linha de comando. O
gcc 14.2.0é o compilador usado na montagem. - Built by static-php-cli 2.8.6
- Quem montou este PHP. No laboratório, é uma ferramenta que gera um PHP "tudo em um". No seu computador essa linha pode não aparecer, ou dizer outra coisa (por exemplo, o nome da distribuição Linux).
- Zend Engine v4.5.8
- O "motor" que executa o código PHP (o nome vem de Zeev e Andi, que o criaram).
- with Zend OPcache
- Uma extensão que guarda o código já "traduzido" na memória, para rodar mais rápido.
A forma longa, php --version, faz exatamente a mesma coisa. Se você só quer o número, peça ao próprio PHP com -r (de run, "rodar um código"):
$ php -r "echo PHP_VERSION;"; echo 8.5.8 « o ; echo do fim só pula a linha no terminal
Se aparecer php: comando não encontrado, o PHP não está instalado (ou não está no PATH): veja Instalar no Linux ou Instalar no Windows e macOS.
A versão dentro do código
Dentro de um programa, o PHP oferece algumas constantes (valores prontos, com nome em maiúsculas) com a versão em que ele está rodando:
<?php echo "Versão completa: " . PHP_VERSION . "\n"; echo "Maior: " . PHP_MAJOR_VERSION . "\n"; echo "Menor: " . PHP_MINOR_VERSION . "\n"; echo "Correção: " . PHP_RELEASE_VERSION . "\n"; echo "Como número: " . PHP_VERSION_ID . "\n";
$ php v.php Versão completa: 8.5.8 Maior: 8 Menor: 5 Correção: 8 Como número: 80508 « 8 · 05 · 08, bom para comparar
O ponto . entre os pedaços junta textos (aula Operadores de String), e o "\n" pula a linha. O PHP_VERSION_ID existe para comparações: 80508 é maior que 80400 (o 8.4.0), então dá para escrever "se a versão for pelo menos a 8.4…" com uma conta simples.
Missão: rode e veja a versão do PHP do navegador (repare que o último número é diferente do laboratório). Depois escreva uma linha que mostre Estou no PHP 8.5 usando PHP_MAJOR_VERSION e PHP_MINOR_VERSION (não digite o 8 nem o 5).
<?php echo "Versão completa: " . PHP_VERSION . "\n";
<?php echo "Versão completa: " . PHP_VERSION . "\n"; echo "Estou no PHP " . PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";
O ciclo de vida de uma versão
Desde 2024, cada versão menor do PHP vive quatro anos, sempre terminando num 31 de dezembro:
| Fase | Duração | O que recebe |
|---|---|---|
| Suporte ativo | 2 anos depois do lançamento | Correções de qualquer falha (bugs) e de segurança. Versões de correção quase todo mês. |
| Só segurança | Mais 2 anos | Apenas consertos de falhas de segurança graves, quando necessário. |
| Fim de vida (end of life, EOL) | Para sempre | Nada. Continua funcionando, mas falhas novas nunca serão corrigidas pela equipe do PHP. |
As versões em 2026
Estas são as datas da página oficial php.net/supported-versions, consultada em 16 de outubro de 2026:
| Versão | Lançada em | Suporte ativo até | Segurança até | Situação em out/2026 |
|---|---|---|---|---|
| 8.5 | 20/11/2025 | 31/12/2027 | 31/12/2029 | Suporte ativo. A versão do guia. |
| 8.4 | 21/11/2024 | 31/12/2026 | 31/12/2028 | Suporte ativo (até o fim do ano) |
| 8.3 | 23/11/2023 | 31/12/2025 | 31/12/2027 | Só segurança |
| 8.2 | 08/12/2022 | 31/12/2024 | 31/12/2026 | Só segurança, nos últimos meses |
| 8.1 e anteriores | 2021 ou antes | — | — | Fim de vida: atualize |
A próxima versão, o PHP 8.6, está em fase de testes (versões "RC", de release candidate) quando esta aula foi escrita, com lançamento marcado para 19 de novembro de 2026. Quando ela sair, o 8.6 entra na tabela e o 8.2 sai em 31 de dezembro. Quando você ler isto, confira a página oficial: as datas das versões já lançadas não mudam, mas a lista de "versões suportadas" anda um ano a cada novembro.
Distribuições como Ubuntu e Debian escolhem uma versão do PHP e ficam com ela durante toda a vida da distribuição, aplicando elas mesmas as correções de segurança (por isso o Ubuntu 26.04 tem o PHP 8.5.4 com um sufixo próprio, 8.5.4-0ubuntu1.3, mesmo depois de a equipe do PHP lançar o 8.5.8). Nesse caso, quem garante a segurança é a distribuição, pelo prazo de suporte dela. A aula Instalar no Linux mostra como conferir.
Qual versão usar?
| Situação | Recomendação |
|---|---|
| Você está aprendendo | A mais nova, 8.5. É a deste guia, e tudo o que você aprender vale para as próximas. |
| Projeto novo | A mais nova que a hospedagem oferece; de preferência 8.4 ou 8.5. |
| Hospedagem só tem 8.2 ou 8.3 | Funciona para quase todo o guia. Fique atento aos selos de versão e planeje a atualização (o 8.2 sai de linha em 31/12/2026). |
| Site antigo em PHP 7 ou 5 | Atualizar é urgente: essas versões não recebem correções de segurança há anos. A aula Novidades do 8.0 ao 8.5 ajuda a entender o que mudou. |
O que cada versão trouxe
Um resumo, só para você se localizar. Muitos nomes ainda não fazem sentido, e tudo bem: cada recurso tem a sua aula, e a aula Novidades do 8.0 ao 8.5 mostra cada um com exemplos.
| Versão | Ano | Destaques |
|---|---|---|
| 7.0 | 2015 | Cerca de duas vezes mais rápido que o 5.6; tipos nos parâmetros e no retorno das funções; o operador ?? (?? e ?->). |
| 7.1 a 7.3 | 2016–2018 | Tipos que aceitam null (?int), void, heredoc mais flexível (Heredoc e Nowdoc). |
| 7.4 | 2019 | Propriedades com tipo, arrow functions (fn), ??=. |
| 8.0 | 2020 | match, argumentos nomeados, ?->, union types (int|string), atributos, promoção no construtor, str_contains, compilador JIT. |
| 8.1 | 2021 | Enums, propriedades readonly, tipo never, callables de primeira classe (strlen(...)), fibers. |
| 8.2 | 2022 | Classes readonly; propriedades dinâmicas passam a gerar aviso de "descontinuado". |
| 8.3 | 2023 | Constantes de classe com tipo, #[\Override], json_validate(). |
| 8.4 | 2024 | Property hooks, visibilidade assimétrica, new sem parênteses extras, array_find(), array_any(), array_all(). |
| 8.5 | 2025 | Operador pipe |>, clone com alterações, #[\NoDiscard], array_first() e array_last(), extensão uri para analisar endereços. |
Um gostinho do 8.5
Veja dois recursos novos do PHP 8.5 lado a lado com o jeito antigo. Não se preocupe em entender cada símbolo; repare só que as duas versões fazem a mesma coisa:
<?php $frutas = ["maçã", "banana", "uva"]; echo array_first($frutas) . "\n"; echo array_last($frutas) . "\n"; echo " ana souza " |> trim(...) |> strtoupper(...); echo "\n";
<?php
$frutas = ["maçã", "banana", "uva"];
echo $frutas[0] . "\n";
echo $frutas[count($frutas) - 1] . "\n";
echo strtoupper(trim(" ana souza "));
echo "\n";
$ php novo.php maçã « array_first: o primeiro da lista uva « array_last: o último ANA SOUZA « tira os espaços das pontas e passa para maiúsculas $ php velho.php maçã uva ANA SOUZA
- array_first($frutas) PHP 8.5+
- O primeiro item da lista. Antes:
$frutas[0](que só funciona se a lista começar na posição 0; veja Arrays Indexados). - array_last($frutas) PHP 8.5+
- O último item. Antes:
$frutas[count($frutas) - 1], a posição do último calculada a partir do tamanho. - |> PHP 8.5+
- O operador pipe ("cano"): passa o valor da esquerda para a função da direita, como numa linha de montagem. Lê-se da esquerda para a direita: "pegue o texto, tire os espaços, passe para maiúsculas". Antes, as funções ficavam umas dentro das outras e eram lidas de dentro para fora:
strtoupper(trim(…)). Aula própria: Operador Pipe.
O selo de versão do guia
Quando uma aula usa um recurso que não existe em todas as versões ainda suportadas, ele ganha um selo:
| Selo | Quer dizer | Exemplos |
|---|---|---|
| PHP 8.0+ · PHP 8.1+ | Funciona em todas as versões suportadas em 2026. O selo aparece só para avisar quem mantém sites antigos. | match, enums, readonly |
| PHP 8.3+ | Não funciona no 8.2. | #[\Override], json_validate() |
| PHP 8.4+ | Não funciona no 8.2 nem no 8.3. | property hooks, array_find() |
| PHP 8.5+ | Só no 8.5 ou mais novo. | |>, array_first() |
Toda aula que mostra um recurso com selo também mostra a alternativa para versões mais antigas, como você viu com array_first e $frutas[0]. Recursos sem selo funcionam em qualquer PHP 8.
Quando dá errado
Você copiou um código com array_first e rodou num computador com PHP 8.4. O PHP 8.4 não conhece essa função, que só nasceu no 8.5, e para com um erro fatal (ilustrativo: o laboratório só tem o 8.5; a mensagem segue o formato real, conferido com uma função que também não existe no 8.5):
Fatal error: Uncaught Error: Call to undefined function array_first() in /home/ana/t/novo.php:3
Stack trace:
#0 {main}
thrown in /home/ana/t/novo.php on line 3
O que aconteceu: "Call to undefined function" = "chamada a uma função não definida". Pode ser erro de digitação no nome ou uma função de uma versão mais nova que a sua. A aula Lendo Erros do PHP desmonta essa mensagem.
Como resolver: confira a versão com php -v. Atualize o PHP ou use a alternativa da tabela de selos (aqui, $frutas[0]).
Operadores novos, como o |>, nem são reconhecidos por versões antigas: o PHP 8.4 diria que encontrou um símbolo inesperado e mostraria um Parse error antes de rodar qualquer linha do arquivo. Se um código que funciona no site de alguém dá Parse error numa linha que parece correta, desconfie da versão.
Como resolver: php -v, e troque o pipe pela forma com funções aninhadas, strtoupper(trim($texto)).
O que aconteceu: o computador pode ter mais de um PHP instalado. O comando php do terminal é um; o servidor web (Apache, nginx com PHP-FPM) pode usar outro. Isso é comum em servidores e em pacotes como o XAMPP.
Como conferir: numa página do site, mostre PHP_VERSION (e apague depois: não é bom deixar a versão à mostra). No terminal, which php mostra qual arquivo o comando php está usando.
Referência
| Comando ou constante | O que dá | No laboratório |
|---|---|---|
php -v · php --version | Versão e informações da montagem | PHP 8.5.8 (cli) … |
PHP_VERSION | A versão completa, como texto | 8.5.8 |
PHP_MAJOR_VERSION | A versão maior | 8 |
PHP_MINOR_VERSION | A versão menor | 5 |
PHP_RELEASE_VERSION | A versão de correção | 8 |
PHP_VERSION_ID | A versão como um número só, bom para comparar | 80508 |
version_compare(PHP_VERSION, "8.5.0", ">=") | true se a versão for pelo menos a 8.5.0 | true |
| php.net/supported-versions | As datas oficiais de suporte |
Para fechar, use um recurso do PHP 8.5 de verdade. Esta caixa roda o PHP 8.5, então array_last funciona:
Missão: a lista de compras da Ana já mostra o primeiro item com array_first. Acrescente uma linha que mostre o último item usando array_last PHP 8.5+. A saída deve terminar com café.
<?php $compras = ["pão", "leite", "café"]; echo "Primeiro: " . array_first($compras) . "\n";
<?php $compras = ["pão", "leite", "café"]; echo "Primeiro: " . array_first($compras) . "\n"; echo "Último: " . array_last($compras) . "\n";
Exercícios
1. Na versão 8.4.13, o que é o 13?
2. Em outubro de 2026, qual destas versões já está em fim de vida?
3. Um recurso tem o selo PHP 8.4+. Em quais versões ele funciona?
4. O comando da versão
Complete o comando que mostra a versão do PHP instalado:
5. A constante
Qual constante guarda a versão completa, como 8.5.8?
Resumo
8.5.8= maior (8) · menor (5, uma por ano, em novembro) · correção (8, só consertos).php -vmostra a versão no terminal;PHP_VERSIONePHP_VERSION_ID, dentro do código.- Cada versão menor tem 2 anos de suporte ativo + 2 só de segurança, terminando em 31 de dezembro.
- Em 2026: 8.5 e 8.4 com suporte ativo; 8.3 e 8.2 só segurança (8.2 até 31/12/2026); 8.1 e anteriores sem suporte.
- O guia ensina o 8.5; recursos novos têm selo (PHP 8.5+) e uma alternativa para versões antigas.
- "Call to undefined function" ou "Parse error" num código que funciona em outro lugar? Confira a versão.
- Próximo passo: Instalar no Linux.