Inkrement och dekrement
PHP Inkrementerings-/Dekrementeringsoperatorer
PHP stöder pre- och post-inkrement och dekrementoperatorer. Dessa unära operatorer tillåter att inkrementera eller dekrementera värdet med ett.
Inkrement-/dekrementoperatorer
Exempel | Namn | Effekt |
---|---|---|
++$a | Pre-inkrement | Ökar $a med ett, sedan returneras $a. |
$a++ | Post-inkrement | Returnerar $a, sedan ökas $a med ett. |
--$a | Pre-dekrement | Minskar $a med ett, sedan returneras $a. |
$a-- | Post-dekrement | Returnerar $a, sedan minskas $a med ett. |
Exempelskript:
<?php
echo 'Post-inkrement:', PHP_EOL;
$a = 5;
var_dump($a++);
var_dump($a);
echo 'Pre-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 'Pre-dekrement:', PHP_EOL;
$a = 5;
var_dump(--$a);
var_dump($a);
?>
Utskrift från exemplet:
;Post-inkrement:
:int(5)
:int(6)
;Pre-inkrement:
:int(6)
:int(6)
;Post-dekrement:
:int(5)
:int(4)
;Pre-dekrement:
:int(4)
:int(4)
Varning
* Inkrement- och dekrementoperatorerna har ingen effekt på värden av typen bool. Ett E_WARNING utlöses från och med PHP 8.3.0, eftersom detta kommer att implicit omvandla värdet till int i framtiden.
* Dekrementoperatorn har ingen effekt på värden av typen null. Ett E_WARNING utlöses från och med PHP 8.3.0, eftersom detta kommer att implicit omvandla värdet till int i framtiden.
* Dekrementoperatorn har ingen effekt på icke-numeriska strängar. Ett E_WARNING utlöses från och med PHP 8.3.0, eftersom ett TypeError kommer att kastas i framtiden.
PERL-stränginkrementfunktion
Varning
Denna funktion är mjukt avskaffad från och med PHP 8.3.0. Funktionen str_increment() bör användas istället.
Det är möjligt att inkrementera en icke-numerisk sträng i PHP. Strängen måste vara en alfanumerisk ASCII-sträng. När man når bokstaven Z överförs inkrementet till värdet till vänster. Till exempel, $a = 'Z'; $a++; blir $a till 'AA'.
Exempel #1 PERL-stränginkrement exempel:
<?php
echo '== Alfabetska strängar ==' . PHP_EOL;
$s = 'W';
for ($n=0; $n<6; $n++) {
echo ++$s . PHP_EOL;
}
// Alfanumeriska strängar beter sig annorlunda
echo '== Alfanumeriska strängar ==' . 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;
}
?>
Utskrift från exemplet:
;Alfabetska strängar:
:X
:Y
:Z
:AA
:AB
:AC
;Alfanumeriska strängar:
:A9
:B0
:B1
:B2
:B3
:B4
:A09
:A10
:A11
:A12
:A13
:A14
Varning
- Om den alfanumeriska strängen kan tolkas som en numerisk sträng kommer den att omvandlas till en int eller float. Detta är särskilt ett problem med strängar som ser ut som flyttal skrivna i exponentiell notation. Funktionen str_increment() lider inte av dessa implicita typomvandlingar.
Exempel #2 Alfanumerisk sträng omvandlad till float:
<?php
$s = "5d9";
var_dump(++$s);
var_dump(++$s);
?>
;Utskrift från exemplet:
:string(3) "5e0"
:float(6)
PHP
Språkreferens