PHP soporta operadores de -pre y post- incremento y disminución. Estos operadores unarios permiten incrementar o disminuir el valor de uno en uno.
Ejemplo | Nombre | Efecto |
---|---|---|
++$a | Pre-incremento | Incrementa $a en uno, y luego devuelve $a. |
$a++ | Post-incremento | Devuelve $a, y luego incrementa $a en uno. |
--$a | Pre-disminución | Disminuye $a en uno, y luego devuelve $a. |
$a-- | Post-disminución | Devuelve $a, y luego disminuye $a en uno. |
Aquí hay un script simple de ejemplo:
<?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-disminución:', PHP_EOL;
$a = 5;
var_dump($a--);
var_dump($a);
echo 'Pre-disminución:', PHP_EOL;
$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-disminución: int(5) int(4) Pre-disminución: int(4) int(4)
Los operadores de incremento o disminución no tienen efecto en valores
de tipo bool.
Se emite un E_WARNING
desde PHP 8.3.0,
porque esto convertirá implicitamente el valor a int en el futuro.
El operador de disminución no tiene efecto en valores
de tipo null.
Se emite un E_WARNING
desde PHP 8.3.0,
porque esto convertirá implicitamente el valor a int en el futuro.
El operador de disminución no tiene efecto en valores no-
string numéricos.
Se emite un E_WARNING
desde PHP 8.3.0,
porque se lanzará un TypeError en el futuro.
Nota:
Objetos internos que soportan sobrecarga de adición y/o sustracción también pueden ser incrementados o disminuidos. Uno de esos objetos internos es GMP.
Esta funcionalidad está obsoleta desde PHP 8.3.0. En su lugar se debe utilizar la función str_increment().
Es posible incrementar un no-
string numérico
en PHP. El string debe ser un string ASCII alfanumérico.
Lo que incrementa las letras hasta la siguiente letra, al llegar a la letra
Z
el incremento se traslada al valor de la izquierda.
Por ejemplo, $a = 'Z'; $a++;
convierte $a
en 'AA'
.
Ejemplo #1 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;
}
// Strings alfanuméricos se comportan diferente
echo '== Strings alfanuméricos ==' . 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 este será convertido a un int o float. it will be cast to an int or float. Este es un problema particularmente con cadenas que parecen números de punto flotante escritos en notación exponencial. La función str_increment() no sufre estas conversiones de tipos implícitas.
Ejemplo #2 String alfanumérico convertido a float
<?php
$s = "5d9";
var_dump(++$s);
var_dump(++$s);
?>
El resultado del ejemplo sería:
string(3) "5e0" float(6)
Esto es porque el valor "5e0"
es interpertado
como un float y convertido al valor 5.0
antes de ser incrementado.