PHP Conference Nagoya 2025

Operadores de Incremento/Decremento

O PHP suporta operadores de pré e pós-incremento operadores de decremento. Esses operadores unários permitem aumentar o diminuir o valor por um.

Operadores de Incremento/Decremento
Exemplo Nome Efeito
++$a Pré-incremento Incrementa $a em um, e então retorna $a.
$a++ Pós-incremento Retorna $a, e então incrementa $a em um.
--$a Pré-decremento Diminuiu $a em um, e então retorna $a.
$a-- Pós-decremento Retorna $a, e então diminui $a em um.

Aqui está um script de exemplo simples:

<?php
echo 'Pós-incremento:', PHP_EOL;
$a = 5;
var_dump($a++);
var_dump($a);

echo
'Pré-incremento:', PHP_EOL;
$a = 5;
var_dump(++$a);
var_dump($a);

echo
'Pós-incremento:', PHP_EOL;
$a = 5;
var_dump($a--);
var_dump($a);

echo
'Pré-decremento:', PHP_EOL;
$a = 5;
var_dump(--$a);
var_dump($a);
?>

O exemplo acima produzirá:

Pós-incremento:
int(5)
int(6)
Pré-incremento:
int(6)
int(6)
Pós-incremento:
int(5)
int(4)
Pós-decremento:
int(4)
int(4)
Aviso

Os operadores de incremento e decremento não tem efeitos em valores do tipo bool. Um E_WARNING é emitido desde o PHP 8.3.0, porque isso causará uma conversão implícita para um tipo int no futuro.

O operador de decremento não tem efeito em valores do tipo null. Um E_WARNING é emitido desde o PHP 8.3.0, porque isso causará uma conversão implícita para um tipo int no futuro.

O operador de decremento não tem efeito em strings não numéricas. Um E_WARNING é emitido desde o PHP 8.3.0, porque isso lançará um TypeError no futuro.

Nota:

Objetos internos que suportam a sobrecarga de adição ou subtração também podem ser incrementados ou decrementados. Um exemplo de objeto assim é o GMP.

Incremento de strings no estilo PERL

Aviso

Esse recurso está desencorajado desde oPHP 8.3.0. A função str_increment() deve ser utilizada.

É possível incremente strings não numéricas no PHP. A string precisa ser um texto ASCII. O efeito é incrementar a última letra até a próxima, e quando é alcançado a letra Z o incremento é carregado para a letra à esquerda. Por exemplo, $a = 'Z'; $a++; transforma $a em 'AA'.

Exemplo #1 Exemplo de incremento de string estilo PERL

<?php
echo '== String alfabética ==' . PHP_EOL;
$s = 'W';
for (
$n=0; $n<6; $n++) {
echo ++
$s . PHP_EOL;
}
// String alfanuméricas tem outro comportamento
echo '== Strings alfanuméricas ==' . PHP_EOL;
$d = 'A8';
for (
$n=0; $n<6; $n++) {
echo ++
$d . PHP_EOL;
}
$d = 'A08';
for (
$n=0; $n<6; $n++) {
echo ++
$d . PHP_EOL;
}
?>

O exemplo acima produzirá:

== String alfabética ==
X
Y
Z
AA
AB
AC
== Strings alfanuméricas ==
A9
B0
B1
B2
B3
B4
A09
A10
A11
A12
A13
A14
Aviso

Se uma string alfanumérica pode ser interpretada como uma string numérica ela será convertida para um int ou float. Isso pode ser um problema para strings que parecem como números de ponto flutuante escritos em notação exponencial. A função str_increment() não sofre desse problema de conversão implícita.

Exemplo #2 Strings alfanuméricas convertida para float

<?php
$s
= "5d9";
var_dump(++$s);
var_dump(++$s);
?>

O exemplo acima produzirá:

string(3) "5e0"
float(6)

Isto ocorre porque o valor "5e0" é interpretado como float e é convertido para o valor de 5.0 antes de ser incrementado.

adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
71
hartmut at php dot net
12 years ago
Note that

$a="9D9"; var_dump(++$a); => string(3) "9E0"

but counting onwards from there

$a="9E0"; var_dump(++$a); => float(10)

this is due to "9E0" being interpreted as a string representation of the float constant 9E0 (or 9e0), and thus evalutes to 9 * 10^0 = 9 (in a float context)
To Top