PHP soporta los operadores de pre- y post- incremento y decremento. Estos operadores unaires permiten aumentar o disminuir la valor de un.
Ejemplo | Nombre | Resultado |
---|---|---|
++$a | Pre-incrementa | Incrementa $a en 1, luego retorna $a. |
$a++ | Post-incrementa | Retorna $a, luego incrementa $a en 1. |
--$a | Pre-decrementa | Decrementa $a en 1, luego retorna $a. |
$a-- | Post-decrementa | Retorna $a, luego decrementa $a en 1. |
A continuación, se presenta un ejemplo simple:
Ejemplo #1 Ejemplos de incremento/decremento
<?php
echo 'Post-incremento:', PHP_EOL;
$a = 5;
var_dump($a++);
var_dump($a);
echo 'Pre-incremento:', PHP_EOL;
$a = 5;
var_dump(++$a);
var_dump($a);
echo 'Post-decremento:', PHP_EOL;
$a = 5;
var_dump($a--);
var_dump($a);
echo 'Pre-decremento:';
$a = 5;
var_dump(--$a);
var_dump($a);
?>
El resultado del ejemplo sería:
Post-incremento: int(5) int(6) Pre-incremento: int(6) int(6) Post-decremento: int(5) int(4) Pre-decremento: int(4) int(4)
Los operadores de incremento y decremento no tienen ningún efecto sobre los valores
de tipo bool.
Un E_WARNING
es emitido a partir de PHP 8.3.0,
ya que esto convertirá implícitamente el valor en int en el futuro.
El operador de decremento no tiene ningún efecto sobre los valores
de tipo null.
Un E_WARNING
es emitido a partir de PHP 8.3.0,
ya que esto convertirá implícitamente el valor en int en el futuro.
El operador de decremento no tiene ningún efecto sobre los strings no numéricos.
Un E_WARNING
es emitido a partir de PHP 8.3.0,
ya que una TypeError será levantada en el futuro.
Nota:
Los objetos internos que soportan la sobrecarga de la adición y/o la sustracción pueden ser incrementados y/o decrementados asimismo. Un objeto interno de este tipo es GMP.
Esta funcionalidad es deprecada de manera suave a partir de PHP 8.3.0. La función str_increment() debe ser utilizada en su lugar.
Es posible incrementar un
string no numérico
en PHP. El string debe ser un string ASCII alfanumérico.
Esto incrementa las letras hasta la siguiente letra, y cuando se alcanza la letra
Z
, el incremento se reporta al valor a la izquierda.
Por ejemplo, $a = 'Z'; $a++;
transforma $a
en 'AA'
.
Ejemplo #2 Ejemplo de incremento de string PERL
<?php
echo '== Strings alfabéticos ==' . PHP_EOL;
$s = 'W';
for ($n=0; $n<6; $n++) {
echo ++$s . PHP_EOL;
}
// Los strings alfanuméricos se comportan de manera diferente
echo '== Caracteres digitales ==' . 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;
}
?>
El resultado del ejemplo sería:
== Strings alfabéticos == X Y Z AA AB AC == Strings alfanuméricos == A9 B0 B1 B2 B3 B4 A09 A10 A11 A12 A13 A14
Si el string alfanumérico puede ser interpretado como un string numérico, será convertido en int o en float. Esto es particularmente problemático con los strings que se asemejan a números de punto flotante escritos en notación exponencial. La función str_increment() no sufre de estas conversiones de tipo implícitas.
Ejemplo #3 Conversión de string alfanumérico a flotante
<?php
$s = "5d9";
var_dump(++$s);
var_dump(++$s);
?>
El resultado del ejemplo sería:
string(3) "5e0" float(6)
Esto se debe a que el valor "5e0"
es interpretado
como un float y convertido en el valor 5.0
antes de ser incrementado.