Az alapoktól...

PHP kezdőknek

PHP kezdőknek

5. lecke - Értéknövelő és értékcsökkentő operátorok

2015. július 02. - Frantique

 

Programozás közben szinte elkerülhetetlen az a forgatókönyv, amikor egy szám típusú változó értékét növelnünk vagy csökkentenünk kell. A növelést "++", a csökkentést pedig "--" operátorokkal érhetjük el. Ilyenkor a változó értéke eggyel növekszik vagy csökken. 

Attól függően, hogy az operátort a változó elé vagy mögé írjuk, két különböző viselkedést tapasztalhatunk: az elé írt operátorral (++$szam) előzetes értéknövelés történik (a $szam értéke eggyel növekszik, majd visszatér a $szam új értékével), a mögé írttal pedig ($szam++) először visszatér az értékkel, majd utána növeli:

-----------------------

<?php
$szam_a = 1;
$szam_b = 2;

echo ' $szam_a: ';
echo $szam_a++; // Kiírja: 1 (mivel az értéknövelés csak a kiírás után történik)
echo ' $szam_b: ';
echo ++$szam_b; // Kiírja: 3 (itt az értéknövelés már a kiírás előtt megtörtént)

?>

-----------------------

Érdekesség

Mi történik, ha egy stringet növelünk? Hasonlóan a Perl nyelvhez, a PHP is az a-z, A-Z és 0-9 tartományokat támogatja, valamint csak a növelés operátor működik. Ha az "a" értékű változót növeljük, az eredmény "b" lesz (mindig a soron következő karakter), ha eléri a lista végét (pl. "z"), akkor eggyel arrébb csúsztatja, és kezdi elölről: "z" után "aa" jön, "aa" után "ab", stb.

-----------------------

<?php
$szoveg = 'a';

echo ' $szoveg: ';
echo ++$szoveg; // Kiírja: b (mivel az értéknövelés megtörtént)
?>

-----------------------

Figyeljük meg az alábbi példát! Habár azt várnánk, hogy a fenti módszerrel a '01' értékű változó növelt értéke '02' lesz, ez nem így van: a PHP automatikusan számként fogja értelmezni, és '2' lesz az eredmény. Ezt ellenőrizhetjük a var_dump segítségével:

-----------------------

<?php
$szoveg = '01';
echo var_dump($szoveg); // vizsgálat: itt még string!
echo ' $szoveg: ';
echo ++$szoveg; // Kiírja: 2 (habár azt várnánk el, hogy '02' legyen az eredmény!)
echo ' ';
echo var_dump($szoveg); // újbóli vizsgálat: itt már integer!
?>

-----------------------

A fenti eset miatt nagyon óvatosan bánjunk az értéknövelt stringekkel, mert elképzelhető, hogy meglepetést okozhat az eredmény. Ez is egy jó példa a gyenge típusosság (amikor egy változó típust válthat művelet közben) csapdájára.

Figyelem!

Habár a $szam += 1 forma azonos hatást produkál a ++$szam formával, a mérések alapján az első gyorsabb. Továbbá a ++$szam gyorsabb és kevesebb memóriát foglal, mint a $szam++. Ha tehetjük, és a programunk logikája megengedi, használjuk az első alakot!

Mi történik, ha a változót nem hoztuk létre, és úgy növeljük? Habár azt várnánk, hogy legalább egy figyelmeztetést kapunk majd, ez nem történik meg, hanem 0 értékkel létrejön a változó, majd megtörténik az értékváltoztatás.

-----------------------

<?php
echo ++$valtozo; // Kiírja: 1 (hibajelzés nélkül létrejön a változó 0 értékkel, majd növeli eggyel)
?>

-----------------------

 

Láthatjuk, hogy az egyszerűnek tűnő operátor mennyire változatosan tud viselkedni. A váratlan eredmények elkerülése érdekében gondoljuk át jól, hogy mit is akarunk elérni az alkalmazásukkal!

----------------------------------------------

Feladatok

 

1. Hozzunk létre két változót, az egyik értékét növeljük eggyel, majd az értéknövelt változóból vonjuk le a második változó értékét!

2. Egy string típusú változót növeljünk, majd írjuk ki az eredményt! 

3. Vizsgáljuk meg egy változó előzetes és utólagos értéknövelését, valamint értékcsökkentését!

 

A bejegyzés trackback címe:

https://php-kezdoknek.blog.hu/api/trackback/id/tr747589944

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása