Inkrement- bzw. Dekrementoperatoren

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

Inkrement- und Dekrementoperatoren
BeispielNameAuswirkung
++$aPrä-Inkrement Erhöht $a um eins und gibt dann $a zurück.
$a++Post-Inkrement Gibt $a zurück und erhöht $a dann um eins.
--$aPrä-Dekrement Vermindert $a um eins, und gibt dann $a zurück.
$a--Post-Dekrement Gibt $a zurück, und vermindert $a dann um eins.

Ein einfaches Beispiel-Skript:

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

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

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

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

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

 Post-Inkrement: int(5) int(6) Prä-Inkrement: int(6) int(6) Post-Dekrement: int(5) int(4) Prä-Dekrement: 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 #1 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 #2 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.

To Top