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!