Operadores de incremento/disminución

PHP soporta operadores de -pre y post- incremento y disminución. Estos operadores unarios permiten incrementar o disminuir el valor de uno en uno.

Operadores de incremento/disminución
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)
Advertencia

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.

Función de incremento de string PERL

Advertencia

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
Advertencia

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.

add a note

User Contributed Notes 1 note

up
71
hartmut at php dot net
12 years ago
Note that

$a="9D9"; var_dump(++$a); => string(3) "9E0"

but counting onwards from there

$a="9E0"; var_dump(++$a); => float(10)

this is due to "9E0" being interpreted as a string representation of the float constant 9E0 (or 9e0), and thus evalutes to 9 * 10^0 = 9 (in a float context)
To Top