## Inkrement- bzw. Dekrement-Operatoren

PHP unterstützt Prä- und Post-Inkrement- und Dekrement-Operatoren. Diese unären (einstelligen) Operatoren ermöglichen es, einen Wert um eins zu erhöhen oder zu verringern.

Inkrement- und Dekrementoperatoren
Beispiel | Name | Auswirkung
--- | --- | ---
++$a | Prä-Inkrementierung | Erhöht $a um eins und gibt dann $a zurück.
$a++ | Post-Inkrementierung | Gibt $a zurück und erhöht $a dann um eins.
--$a | Prä-Dekrementierung | Vermindert $a um eins, und gibt dann $a zurück.
$a-- | Post-Dekrementierung | Gibt $a zurück, und vermindert $a dann um eins.

Beispiel #1 Beispiele für Inkrementierung/Dekrementierung

    <?php
    echo "Post-Inkrementierung", PHP_EOL;
    $a = 5;
    var_dump($a++);
    var_dump($a);

    echo "Prä-Inkrementierung", PHP_EOL;
    $a = 5;
    var_dump(++$a);
    var_dump($a);

    echo "Post-Dekrementierung", PHP_EOL;
    $a = 5;
    var_dump($a--);
    var_dump($a);

    echo "Prä-Dekrementierung", PHP_EOL;
    $a = 5;
    var_dump(--$a);
    var_dump($a);
    ?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

    Post-Inkrementierung:
    int(5)
    int(6)
    Prä-Inkrementierung:
    int(6)
    int(6)
    Post-Dekrementierung:
    int(5)
    int(4)
    Prä-Dekrementierung:
    int(4)
    int(4)

Warnung

Die Inkrement- und Dekrement-Operatoren wirken sich nicht auf Werte vom Typ bool aus. Seit PHP 8.3.0 wird ein `E_WARNING` ausgegeben, weil der Wert dadurch in Zukunft implizit in int umgewandelt wird.

Der Dekrement-Operator wirkt sich nicht auf Werte vom Typ null aus. Seit PHP 8.3.0 wird ein `E_WARNING` ausgegeben, weil der Wert dadurch in Zukunft implizit in int umgewandelt wird.

Der Dekrement-Operator wirkt sich nicht auf nicht-numerische Zeichenketten. aus Seit PHP 8.3.0 wird ein `E_WARNING` ausgegeben, weil in Zukunft ein TypeError geworfen wird.

> Hinweis:

> Interne Objekte, die das Überladen von Addition und/oder Subtraktion unterstützen, können ebenfalls inkrementiert und/oder dekrementiert werden. Ein solches internes Objekt ist GMP.

### Inkrementieren von Zeichenketten im PERL-Stil

Warnung

Diese Funktionalität ist seit PHP 8.3.0 veraltet (soft-deprecated). Stattdessen sollte die Funktion str_increment() verwendet werden.

In PHP ist es möglich, eine nicht-numerische Zeichenkette zu inkrementieren, sofern es sich um eine alphanumerische ASCII-Zeichenkette handelt. Dabei werden die Buchstaben bis zum nächsten Buchstaben hochgezählt, und bei Erreichen des Buchstabens `Z` wird die Inkrementierung auf den Wert auf der linken Seite übertragen. Beispielsweise verwandelt `$a = 'Z'; $a++;` $a in `'AA'`.

Beispiel #2 Beispiel für die Inkrementierung von Zeichenketten im PERL-Stil

    <?php
    echo '== Zeichenketten aus Buchstaben ==' . PHP_EOL;
    $s = 'W';
    for ($n=0; $n<6; $n++) {
        echo ++$s . PHP_EOL;
    }
    // Alphanumerische Zeichenketten verhalten sich anders
    echo '== Alphanumerische Zeichenketten ==' . 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;
    }
    ?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

    == Zeichenketten aus Buchstaben ==
    X
    Y
    Z
    AA
    AB
    AC
    == Alphanumerische Zeichenketten ==
    A9
    B0
    B1
    B2
    B3
    B4
    A09
    A10
    A11
    A12
    A13
    A14

Warnung

Wenn eine alphanumerische Zeichenkette als numerische Zeichenkette interpretiert werden kann, wird sie in den Typ int oder float umgewandelt. Dies ist vor allem bei Zeichenketten ein Problem, die aussehen wie Gleitkommazahlen in Exponentialschreibweise. Die Funktion str_increment() nimmt diese impliziten Typumwandlungen nicht vor.

Beispiel #3 Umwandlung einer alphanumerischen Zeichenkette in eine Gleitkommazahl

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

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

Das liegt daran, dass der Wert `"5e0"` als float interpretiert und in den Wert `5.0` umgewandelt wird, bevor er inkrementiert wird.

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