Por isso deve-se usar empty() sempre.
Php 8.1 tem problemas em expressões/comparações com variáveis string.
A migração de PHP 7.3 para 8.1 traz mudanças significativas: novas funcionalidades, remoção de recursos antigos e alterações incompatíveis. O ponto crítico é revisar funções descontinuadas, tipos de retorno mais estritos e ajustes em sintaxes que antes eram toleradas.
Principais mudanças entre PHP 7.3 e 8.1
1. Tipagem e Estrutura da Linguagem
-
Tipos mais estritos: PHP 8 introduziu Union Types (
int|float) e Intersection Types.
-
Correção: Se funções em 7.3 aceitavam múltiplos tipos sem declaração, agora é recomendável declarar explicitamente.
-
Enums (PHP 8.1): substituem constantes em muitos casos.
-
Correção: Migrar conjuntos de constantes para
enum quando fizer sentido.
-
Readonly Properties (8.1): propriedades que só podem ser atribuídas uma vez.
-
Correção: Usar
public readonly string $nome; em vez de lógica manual de bloqueio.
2. Funções e Sintaxe
-
Funções descontinuadas:
-
each() foi removida (já obsoleta em 7.2).
-
Correção: substituir por
foreach.
-
create_function() não existe mais.
-
Correção: usar closures (
function() { ... }).
-
Array e Strings:
-
implode() agora exige ordem correta dos parâmetros (implode($glue, $array)).
-
str_split() e funções similares têm validações mais rígidas.
-
Correção: revisar chamadas com parâmetros inválidos.
3. Erros e Exceções
-
Erros de tipagem agora lançam
TypeError em vez de serem silenciosos.
-
Correção: adicionar
try/catch em pontos críticos.
-
Warnings promovidos a Errors:
- Exemplo: acesso a offset em
null agora gera Error.
-
Correção: validar variáveis antes de acessar índices.
4. Novos Recursos
-
Fibers (8.1): suporte a concorrência leve.
-
Match Expression (8.0): alternativa mais segura ao
switch.
-
Correção: migrar
switch simples para match quando possível.
-
Named Arguments: permitem chamadas mais claras.
-
Correção: revisar funções com muitos parâmetros opcionais.
Exemplos de Correção
Exemplo 1 – Função each() removida
// Código antigo (PHP 7.3)
while(list($key, $val) = each($array)) {
echo "$key => $val";
}
// Correção (PHP 8.1)
foreach ($array as $key => $val) {
echo "$key => $val";
}
Exemplo 2 – Tipagem mais estrita
// PHP 7.3
function soma($a, $b) {
return $a + $b;
}
// PHP 8.1
function soma(int|float $a, int|float $b): int|float {
return $a + $b;
}
Exemplo 3 – Acesso inválido em null
// PHP 7.3 (gera Warning)
echo $var['chave'];
// PHP 8.1 (gera Error)
if (is_array($var) && isset($var['chave'])) {
echo $var['chave'];
}
Recomendações práticas para migração
-
Rodar testes automatizados antes da atualização.
-
Usar ferramentas como
phpstan ou psalm para detectar incompatibilidades.
-
Verificar bibliotecas externas: muitas dependências podem não estar compatíveis com PHP 8.1.
-
Consultar guias oficiais de migração: PHP Migration 8.1.