Na most jön a sava-borsa...
A függvények használata a PHP nélkülözhetetlen és igen hasznos részét képezik. Segítségükkel - ha az ismétlődő kódrészekre függvényt írunk - összetettebb kódonk jelentősen lerövidíthető, amit tetszés szerinti helyekről hívhatunk meg. A PHP mindig rendelkezésre álló beépített függvényei is sok munkától kímélhetnek meg.
A függvények önálló kódrészletek, amik csak akkor futnak le, ha erre a meghívásukkal utasítást adunk - de egy függvényt egy programon belül akár többször is lefuttathatunk. Futásuk közben a bemenetükön át közölt adatokat feldolgozzák és az eredményt a kimenetre továbbítják. A teljes program a függvényt egy zárt doboznak tekinti, amivel a be- és a kimenetén keresztül kommunikál.
===> adat bemenet |
f ü g g v é n y |
===> eredmény kimenet |
A függvények alapvető szintaxisa edig így néz ki:
<?php
function fuggvenyem(adat_bemenet)
{
... függvény törzs ...
... itt dolgozza fel az adatokat ...
return kimenet; // a feldolgozás eredménye megjelenik a kimeneten
}
?>
Közel 4000 gyakrabban használt függvény előre definiált a PHP-ban, ezeknek teljes listáját a PHP kézikönyv tartalmazza itt. Ugyanitt minden függvény helyes használatát is bemutatják.
Speciális célra definiálhat a programozó is függvényt. Továbbiakban ezeken keresztül mutatjuk be a függvények használatát.
fel...
Felhasználó által definiált függvények
Nézzük az előző példánkat egy működő függvény képében:
<?php
function fuggvenyem($bemenet)
{
$kimenet = $bemenet * 2; // itt csinál valamit a bemeneti adattal
return $kimenet; // az eredmény megjelenik a kimeneten
}
?>
Mit látunk?
- A függvénydeklarációt mindig a function szóval vezetjük be.
- Ezután megadjuk a függvényünk nevét - függvényként még nem szereplő nevet válasszunk a változónév képzés szabályai szerint.
- Végül egy kerek zárójel pár () tartalmazza a bemeneti adatokat.
- A függvény kódjának lefutásával keletkezett eredménnyel fog a függvény visszatérni a függvényünk.
A függvény csak akkor fog lefutni, amikor azt a programban valahol meghívjuk, például így:
<?php
$a = 12;
print $a . " duplája: " . fuggvenyem($a);
?>
Látjuk: itt hívjuk meg a függvényt, bemeneteként megadtuk az $a változót, amit a függvény belülről mint bemeneti adatot lát. Lefut a kódja és az eredményt a return kifejezésbe teszi. Kívűlről a program ezt az értéket látja azon a helyen, ahova a függvényt behelyettesítettük (hisz azt már megbeszéltük hogy a függvényt a program egésze egy zárt dobozként kezeli, nem lát bele).
A példát működés közben is megnézheted itt (10/1. példa).
fel...
Bemeneti adatok
A függvény a környezetétől a bemenetén keresztül kapja meg a feldolgozandó adatokat. Ezeket a függvény neve utáni kerek zárójel-pár közé kell beírni. Bemeneti adatot nem kötelező megadni - ez esetben csak az üres zárójelpár szerepel - illetve megadható egy, vagy több bemeneti paraméter is. Több paraméter esetén azokat vesszővel kell elválasztani. A bemeneti paraméterek bármilyen adattípusúak lehetnek.
Bár a zárójeleket mindig kötelező kitenni, néhány beépített PHP függvény azért kivétel ez alól. Például a print(), include() függvények használhatók zárójelekkel és anélkül is. (Ez azon kivételek egyike is, ahol nem lehet tapasztalni a programnyelv máshol szigorú logikáját.)
Habár alapértelmezetten a függvénynek átadott változó érték másolata kerül a függvény bemenetére és annak függvényen belüli változása nincs hatással a változó eredeti értékére, itt is módunk van ettől eltérni. A módszert korábban már megismertük: a & jellel itt is hivatkozhatunk az eredeti változóra. Ilyen esetben a változó függvényen belüli módosulása hatással lesz az eredeti változó értékére is.
<?php
function fgv_extrakkal(&$string)
{
$string .= "és a szükséges plusssz.";
}
$str = "Ez egy karakterfüzér, ";
fgv_extrakkal($str);
print $str; // kiírja: Ez egy karakterfüzér, és a szükséges plusssz.
?>
A példát működés közben is megnézheted itt (10/2. példa).
A paramétereknek lehet alapértelmezett értéke is. Ha nem adunk meg ilyen paramétert a függvény hívásakor, akkor a annak lefutásakor az alapértelmezett értékkel fog számolni.
<?php
function kavet_csinal ($tipus = "cappucino")
{
return "Csinálok egy pohár " . $tipus . "t. <br />\n";
}
print kavet_csinal (); // kiírja: Csinálok egy pohár cappucinot.
print kavet_csinal ("espresso"); // kiírja: Csinálok egy pohár espressot.
?>
A példát működés közben is megnézheted itt (10/3. példa).
Az alapértelmezett értékkel rendelkező paramétereket a paraméterlista végére kell tenni:
function fuggvenyem($egy, $ketto, $harom = "három")
fel...
A függvény visszatérési értéke
A függvény kimenetén megjelenő értéket a függvény visszatérési értékének nevezzük.
A függvény az elvégzett művelet eredményét a return kifejezés segítségével adhatja át a programnak a beillesztés helyén, de az eredmény jelentkezhet az egész programon kívül is, például a print() segítségével (ami maga is egy függvény) a paramétereként megadott karaktersort kiírja a képernyőre - azaz közvetlenük a HTML kimenetre küldi - vagy akár fájlba ír, kukit helyez el, vagy bármi mást csinál.
A return-al átadott visszatérési érték bármilyen típusú lehet.
A return elérésekor a függvény átadja a vezérlést a program soron következő részének. Ha nincs return utasítás, akkor a függvény kimeneti értéke az utolsó kiértékelt kifejezés értéke lesz.
Az alábbi gyakorlatiasabb példának nincs return utasítása, a kimenetet a print() sagítségével a képernyőre küldjük.
<?php
function paros($bemenet)
{
if ($bemenet % 2 == 0)
print "A " . $bemenet . " páros szám. <br />\n";
else
print "A " . $bemenet . " páratlan szám. <br />\n";
}
paros(1);
paros(2);
paros(3);
paros(4);
?>
A példát működés közben is megnézheted itt (10/4. példa).
Ha a függvénynek referenciával kell visszatérnie, akkor az & referencia operátort kell alkalmaznod a függvény deklarásákor és a a visszatérési érték megadásakor is.
<?php
function &referenciat_ad_vissza()
{
return &$valtozo;
}
$hivatkozas = &referenciat_ad_vissza();
?>
fel...
Változók hatóköre a függvényben
Már említettük, alapelv, hogy a programunk számára a függvény egy önálló egység, egy "fekete doboz", ami csak a bemenetén és a kimenetén keresztül kommunikál a környzetével.
Ennek a következménye, hogy a program kívülről nem látja a függvényen belül létrehozott változókat, a bemenetén beadott változók módosításait. Igaz viszont, hogy a függvényen belülről sem látszanak a programkörnyezet külső változói. Ez a jellemző sokszor jól jöhet, mert nem kell ügyelnünk a különböző függvényekben és az egész programban lévő azonos nevű változók ütközésére.
A global kolcsszó:
Néha azonban jól jönne, ha bizonyos változókat mégis el lehetne érni a függvényen belül is.
Erre találták ki a global kulcsszót, mint kivétel-kezelést. A probléma szemléltetésére nézzük meg ezt a példát:
<?php
function korod()
{
print "1-Életkorod: " . $kor . " év.\n";
}
$kor = 15;
print korod();
?>
A kód eredménye itt látható (10/5. példa).
Amint látjuk, nem látunk semmit. Azaz a függvény nem látja a $kor változót, mert az a függvényen kívül van. De ha használjuk a global kulcsszót, mindjárt megjavul a kódunk:
<?php
function korod2()
{
global $kor;
print "2-Életkorod: " . $kor . " év.\n";
}
$kor = 15;
print korod2();
?>
Nézzük meg ezt is (10/6. példa).
A magyarázat egyszerű: a global kulcsszóval globálissá tettük a függvényünk számára a megnevezett környezeti helyi változót. Több változót is felsorolhatunk a global kulcsszó után egymástól vesszővel elválasztva őket.
A globális és szuperglobális változók (ilyenek például a $_GET, $_POST, $_COOKIE...) elérhetők a global kulcsszó nélkül is.
A static kulcsszó:
A függvény minden hívása kezdetekor egy alaphelyzetből indul. Ha egy programban többször hívjuk meg ugyanazt a függvényt, előfordulhat, hogy szükségünk lenne a legutolsó futáskor felvett állapot megőrzésére, például, ha valamit megszámolunk.
Erre kínál a PHP egy kiegészítő lehetőséget, a static kulcsszóval. A tárolni kívánt adatot megjegyzi és a függvény következő futásakor nem az alapértelmezettel, hanem az utoljára beállítottal fog számolni.
Az alábbi példában bekezdéseket fogunk sorszámozni ezzel a módszerrel.
<?php
function szamozott_sorok($szoveg)
{
static $hivasok_szama = 0; // alapértelmezett érték
$hivasok_szama++; // növeljük eggyel
print $hivasok_szama.". sor - ".$szoveg."<br />\n";
}
// a függvényt többször is meghívjuk:
szamozott_sorok("valami szöveg");
szamozott_sorok("akármi stöveg");
szamozott_sorok("bármi szöveg");
?>
Fejezetünk utolsó példáját itt láthatjuk működés közben. (10/7. példa).
|