...:::Programozz kedvedre!:::...
Menü
 
HTML
 
PHP
 
Függvények

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.

Mi a függvény?

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.

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).

===>
adat bemenet
f ü g g v é n y ===>
eredmény kimenet
 

Bejelentkezés
Felhasználónév:

Jelszó:
SúgóSúgó
Regisztráció
Elfelejtettem a jelszót
 
XHTML
 
Linkek

Freewebsite
Programozás.lap.hu
Webmester.lap.hu

 

Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168 Hívjon!    *****    A legfrissebb hírek a Super Mario világából és a legteljesebb adatbázis a Mario játékokról.Folyamatosan bõvülõ tartalom.    *****    Gigágá! Márton napján is gyertek a Mesetárba! Nemcsak libát, de kacsát is kaptok! Játsszatok velünk!    *****    A Nintendo a Nintendo Music-kal megint valami kiváló dolgot hozott létre! Alaposan nagyító alá vettem, az eredmény itt.    *****    Leanderek, Parfümök, Olajok, és Szépségápolási termékek! Használd a LEVI10 kupont és kapj 10% kedvezményt!Megnyitottunk    *****    Megjelent a Nintendo saját gyártású órája, a Nintendo Sound Clock Alarmo! Ha kíváncsi vagy, mit tud, itt olvashatsz róla    *****    Megnyílt a webáruházunk! Parfümök, Szépségápolási termékek, Olajok mind egy helyen! Nyitási akciók, siess mert limitált!    *****    Az általam legjobbnak vélt sportanimék listája itt olvasható. Top 10 Sportanime az Anime Odyssey-n!    *****    Pont ITT Pont MOST! Pont NEKED! Már fejlesztés alatt is szebbnél szebb képek! Ha gondolod gyere less be!    *****    Megnyílt a webáruházunk! NYITÁSI AKCIÓK! Tusfürdõ+Fogkrém+Sampon+Izzadásgátló+multifunkcionális balzsam most csak 4.490!    *****    Új mese a Mesetárban! Téged is vár, gyere bátran!    *****    Veterán anime rajongók egyik kedvence a Vadmacska kommandó. Retrospektív cikket olvashatsz róla az Anime Odyssey blogban    *****    Parfümök, Olajok, Párologtatók mind egy weboldalon! Siess mert nyitási AKCIÓNK nem sokáig tart! Nagy kedvezmények várnak    *****    Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168 Hívjon!    *****    Aki érdeklõdik a horoszkópja után, az nem kíváncsi, hanem intelligens. Rendeld meg most és én segítek az értelmezésben!    *****    A Múzsa, egy gruppi élményei a színfalak mögött + napi agymenések és bölcseletek    *****    KARATE OKTATÁS *** kicsiknek és nagyoknak *** Budapest I. II. XII.kerületekben +36 70 779-55-77    *****    Augusztus 26-án Kutyák Világnapja! Gyertek a Mesetárba, és ünnepeljétek kutyás színezõkkel! Vau-vau!    *****    A horoszkóp elemzésed utáni érdeklõdés, nem kíváncsiság hanem intelligencia. Rendeld meg és nem fogod megbánni. Katt!!!    *****    Cikksorozatba kezdtem a PlayStation történelmérõl. Miért indult nehezen a Sony karrierje a konzoliparban?