• Nem Talált Eredményt

4. Lecke: Literálok, változók, tömbök

4.4 Változók

A literálok csak a programkód írásakor már ismert értékek tárolására al-kalmasak, hiszen a programozónak bele kell írnia értéküket a kódba. A program futása során keletkező adatokat nem tárolhatjuk literálként. A futás közben létrehozott adatokat változókban helyezzük el.

A PHP-értelmező a futó program számára lefoglalja a számítógép memó-riájának egy részét. A változó ennek a memóriának egy névvel azonosított szakasza, ahol valamilyen érték, adat tárolódik. A név a változó hivatkozási neve, az adat pedig az értéke. A programkódban a hivatkozási névvel hivatkoz-hatunk memóriában elhelyezett adatra. Az aktuális feladattól függően kimenet-re írhatjuk, vagy megváltoztathatjuk a változóban tárolt értékét.

Ha egy literált többször is használunk a programkódban, akkor érté-két célszerűbb változóban tárolni, és a változó nevével hivatkozni az értékre. Ez megkönnyíti a kód értelmezését, és egyszerűbbé teszi a programkód esetleges átírását. Az adatok programkódban történő tárolására tehát literálok helyett lehetőleg használjunk változókat!

4.4.1 Változók deklarálása

Mielőtt egy változóra hivatkoznánk, azaz használnánk az értékét:

1. le kell foglalni a helyét a memóriában,

2. hozzá kell rendelni a hivatkozási nevét (nevet kell adni a vál-tozónak),

3. meg kell adni a változó kezdőértékét.

Az 1-es és 2-es pontot együtt deklarációnak nevezzük, a 3. pontot érték-adásnak hívjuk. Egy változónak csak a deklaráció után adhatunk értéket, az értékre pedig csak értékadás után hivatkozhatunk a változó nevével.

Változók nevei

A változók lehetséges neveit minden programozási nyelv szigorúan szabá-lyozza. PHP-ben minden változónév dollár jellel ($) kezdődik, betűkből, szám-jegyekből és aláhúzás karakterekből (_) állhat. Megkötés, hogy a $ jelet követő első karakter nem lehet számjegy!

Betűnek számít az angol ábécé bármely betűje a-z-ig és A-Z-ig, valamint az ASCII karakterek a 127-es kódtól 255-ös kódig (0x7f-0xff).

A változónevek nem tartalmazhatnak szóközt, és bár az ASCII 127-255 ka-rakterek között megtalálunk néhány nemzeti karaktert is, ezek használata köny-nyen vezethet félreértésekhez, ezért célszerű őket kerülni.

Az "ü" például megtalálható az ASCII-táblázatban (129) az "ő" azon-ban nem. Ha nem akarjuk örökké az ASCII-táblát nézegetni, akkor csak az angol ábécé betűit, aláhúzás karaktereket és számjegyeket használjunk!

A PHP – mint tudjuk – az utasítások neveiben nem különbözteti meg a kis- és nagybetűvel írt változatokat.

A változónevek kis- nagybetű érzékenyek!

Az $adat nevű változó nem azonos az $ADAT-tal!

Változók típusa

Az úgynevezett szigorúan típusos nyelvekben explicit deklarációra van szükség, ami azt jelenti, hogy a hivatkozás név mellett a változó típusát is meg kell adni a deklarációkor. A típus meghatározza a változó lehetséges értékeit, a vele végezhető műveleteket és az adat tárolására használt memória méretét is befolyásolja.

A PHP nem tartozik a szigorúan típusos nyelvek közé, de az adattípusoknak itt is van jelentőségük. A egyszerű, összetett és speciális típusú változókat használhatunk.

Az egyszerű típusok az alábbiak:

boolean: logikai adat tárolására használt változók típusa.

integer: egész számok típusa.

double/float: tizedes törtek tárolására alkalmas változók típusa.

string: szöveg típus.

76 Literálok, változók, tömbök

Két összetett típus áll rendelkezésre:

array: több, akár különböző típusú adat tárolását lehetővé tévő típus.

object: adatok és műveletek tárolása alkalmas típus.

Speciális típusok:

resource: erőforrás típus, a MySQL adatbázisokkal foglalkozó leckében dolgozunk ilyen változókkal.

NULL: speciális típus, az értéket nem tartalmazó, ÜRES változó típusa.

Implicit deklaráció

A PHP úgynevezett gyengén típusos nyelv, ami azt jelenti, hogy egy válto-zó deklarálásakor nem kell megadni annak típusát. A váltoválto-zót egyszerű érték-adással, azaz implicit deklarációval hozhatjuk létre.

$a=10;

A fenti sor lefoglalja a változó helyét a memóriában (ha az még nem léte-zett), hozzárendeli a $a hivatkozási nevet és elhelyezi a változóban a 10-es értéket. A deklarációt azért nevezzük implicitnek, mert a változó típusát a tá-rolt érték típusa határozza meg, explicit megnevezésére nincs mód. Emiatt – bár nem jeleztük – az $a változó integer, azaz egész szám típusú lesz.

A típust tehát alapvetően a tárolt érték határozza meg, de arra is van lehe-tőség, hogy a változót a program különböző pontjain más-más típusú adatként kezeljük, sőt típusát meg is változtathatjuk a futás során.

Az alábbi programocska a 10 értéket írja a kimentre, holott a 4.

sorban egy szöveg és egy egész szám típusú változót szoroztunk össze. A PHP a környezetnek, kifejezésben magadott műveletnek megfelelően, számként kezeli a szöveg változót.

1. <?php

Ez a fajta kötetlenség nagy szabadságot ad a programozónak, ugyan-akkor számos hibához vezethet a figyelmetlen felhasználás során.

Ezért lehetőleg kerüljük a típusok keverését, és csak azonos típusú változókat helyezzünk közös kifejezésbe! Ha erre nincs lehetőség, használjuk a típusátalakítás lehetőségeit!

Változó típusának meghatározása

Mivel a PHP-ben nem kell, és nem is lehet explicit deklarációval létrehozni a változókat, ráadásul a típus meg is változhat a program futása közben, nem lehetünk biztosak egy változó pillanatnyi típusában. A PHP számtalan függvény-nyel támogatja a programozó munkáját (A függvényekről bővebben az alprog-ramokról szóló leckében olvashatunk). Közöttük megtalálhatók a típusok meg-határozásával és konverziójával kapcsolatos függvények is.

A gettype függvény egy változót vár paraméterként és visszaadja annak típusát.

1 <?php

2 //gettype.php 3 $a=123;

4 echo gettype($a),"<br/>"; //integer

$b=3.14;

echo gettype($b),"<br/>"; //double

$c="Hello World";

echo gettype($c),"<br/>"; //string

$d=$a===$b;

echo gettype($d),"<br/>"; //boolean

?>

Forrás: gettype.php Típusátalakítás függvénnyel

A PHP gyengén típusos mivolta nemcsak jelenti, hogy deklaráláskor nem kell megadnunk a típust, hanem azt is, hogy a változók típusa egyszerűen átala-kítható. A két paramétert váró settype függvénnyel explicit módon adhatjuk meg egy változó típusát. A függvény első paramétere egy változó, a második pedig a céltípus szöveg formájában megadott neve. A függvény eredménye true, ha a sikeres az átalakítás, false ha a konverzió közben hiba keletke-zett.

78 Literálok, változók, tömbök

1 <?php

2 //settype.php 3 $b=3.14;

echo "\$b típusa: ",gettype($b),"<br/>"; //double settype($b,"integer");

echo "\$b típusa: ",gettype($b),"<br/>"; //integer

?>

Forrás: settype.php

A változó típusának megváltoztatásakor sérülhet az abban tárolt ér-ték. Ha egy double változót integer típusúra állítunk a törtrész el-vész.

Típus átalakítása casting-gal

A settype() függvény ténylegesen megváltoztatja a változó típusát.

Ha változót csak egy adott ponton akarjuk más típusú adatként használni, akkor típus ideiglenes átalakítása, az úgynevezett type casting technikával vé-gezhető el. Ilyenkor – kerek zárójelek között – a változó neve el kell írni a kívánt típus nevét!

1 <?php

2 //casting.php 3 $b=3.14;

4 echo "\$b=$b; típusa: ",gettype($b),"<br/>";

5 echo "(integer) \$b típusa:

",gettype((integer)$b),"<br/>";

6 echo "\$b típusa: ",gettype($b),"<br/>";

7 ?>

Forrás: casting.php

4.4.2 Változók törlése

Előfordul, hogy nagyobb PHP-programban törölni szeretnénk egy korábban létrehozott változót. Erre használhatjuk PHP unset() függvényét, ami teljes egészében eltűnteti a memóriából a paraméterként megadott változót. Ha ezu-tán hivatkozunk a változóra, a hibát jelző megjegyzés jelenik meg a kimeneten, de a futás nem szakad meg.

1 $a=300;

2 unset($a);

3 echo $a; //Undefined variable: t

Ha csak az értékét akarjuk törölni, adjunk NULL értéket a változónak!