Inkrement och dekrement

Från Wiki.linux.se
Version från den 16 augusti 2024 kl. 05.33 av Admin (diskussion | bidrag) (→‎PHP Inkrementerings-/Dekrementeringsoperatorer)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

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