2012. január 16., hétfő

PHP - gyakorlat - sör

A következő néhány leckében nagyon egyszerű kis gyakorlatokat fogunk megnézni. Tényleg nagyon egyszerűeket. Olyanokat, amik bemutatják az eddigi ismereteink gyakorlati használt. A mai napon sörözünk egy kicsit :D
A 99 Bottles of Beer (99 palack sör) egy tradicionális angol mondóka. A szövege angolul így hangzik (99 palack az asztalon... elveszünk mindig egyet, amíg nem marad egy sem). A programunk ki fogja írni az egész verset... ciklusokkal és elágazásokkal.

Kezdjünk bele a programunkba.

Fontos, hogy nem akarunk minden versszakot saját kezűleg kiíratni. Ezért írnunk kell egy ciklust. A ciklusunk for lesz, hiszen pontosan tudjuk, hogy hányszor fog lefutni.

for($i=99; $i>=1; $i--)
{
 
}

Elemezzük is:
A vers elején 99 üveg sörünk van. Tehát valószínű a ciklus kezdőértéke 99 lesz ($i = 99). Addig megyek, amíg van söröm, tehát 1 darabom van. Utána legyen vége a ciklusnak. Mindig, amikor ismétlem a kódot, csökkentse az $i értékét eggyel.

Még egy fontos lépés következik, ami újdonság is számunkra. Az angol nyelvben, ha valamiből több van, akkor a szó végére (legtöbbször, de legalábbis a bottle(s) esetében) s betűt teszünk. A versben csak akkor nincs s a szó végén, amikor az $i értéke pontosan 1. Erre alkalmazunk egy feltételt.

HA nem egy darab van
AKKOR hozzon létre egy stringet, aminek az értéke "s"
AMÚGY hozzon létre egy stringet, aminek az értéke "" (tehát nincs értéke)

if($i>1)
{
  $s = "s";
}

else
{
 $s = "";
}

Ez egy kicsit hosszú kód egy ilyen rövid feladat elvégzéséhez. Ennek leegyszerűsítéséhez találták ki a ? operátort.

FELTÉTEL ? IGAZ ÁG : HAMIS ÁG;

$változó = feltétel ? változó értéke, ha a feltétel teljesül : a változó értéke, ha a feltétel nem teljesül

Tehát:

$s = $i > 1 ? "s" : "";

Az $s változó értéke, ha az $i > 1 feltétel teljesül "s" lesz, ha nem, akkor "".
Érdemes ezt megtanulni, mert sokszor leegyszerűsíti a dolgunkat.

Most pedig kiírjuk a versszakok első sorát:

Az $i tárolja azt, hogy hány üveg sörünk van, az $s pedig a többes szám jelét. Tehát az első sor kódja így néz ki:

echo "<p>$i Bottle$s of beer on the wall, $i bottle$s of beer.<br>";

Elemezzük:

Az echo segítségével kiíratom a "" közötti részt. Megnyitok egy bekezdést, aminek a vége majd a versszak utolsó sorának kiírásakor lesz.
Először leírom, hogy hány üveg söröm van. Utána leírom, hogy Bottles (üveg). Ezt, szóköz nélkül követi az $s változónk, ami a többes szám jelét tárolja. Ha csak 1 üveg sör van, akkor is odaírhatom, hiszen az értéke "". Aztán pedig kiírom ugyan ezt még egyszer.

A következő verssorban semmi különös nincs.

echo "Take one down and pass it around,";

Az utolsó verssor már érdekesebb.

echo ($i-1)." bottle$s of beer on the wall.</p>\n";

Először kiírom, hogy miután elvettem egyet a sörökből, hány marad. Tehát $i-1. Majd kiírom a többi, már ismert szöveget, s lezárom a bekezdést.

A PHP kóddal már végeztünk is. Ezek után már könnyedén áttérhetünk a HTML kódba, hiszen az mindenképpen lefut (mert a sör az mindig elfogy :'D).



<p>No more bottles of beer on the wall. No more bottles of beer...<br>
Go to the store and buy some more... 99 bottles of beer on the wall.</p>



A teljes kód a következő:


<html>
<body>
          <?php
             for($i=99; $i>=1; $i--){
             $s = $i > 1?"s":"";
             echo "$i Bottle$s of beer on the wall, $i bottle$s of beer.<br>";
             echo "Take one down and pass it around, ";
             echo ($i-1)." bottle$s of beer on the wall.</p>\n";
             }
          ?>

         <p>No more bottles of beer on the wall. No more bottles of beer...<br>
         Go to the store and buy some more... 99 bottles of beer on the wall.</p>

</body>
</html>

Az oldal pedig kiírja a teljes verset. A következő leckében létrehozunk egy nagyon egyszerű összeadógépet.

Nincsenek megjegyzések:

Megjegyzés küldése