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

Exemplo #1 Exemplos de incremento/decremento

    <?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 o PHP 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çada a letra `Z` o incremento é carregado para a letra à esquerda. Por exemplo, `$a = 'Z'; $a++;` transforma $a em `'AA'`.

Exemplo #2 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 #3 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.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open