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)
Warning

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.

Note:

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

Warning

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'.

Example #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
Warning

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.

Example #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.