...:::Programozz kedvedre!:::...
Men
 
HTML
 
PHP
 
Fggvnyek

Na most jn a sava-borsa...
A fggvnyek hasznlata a PHP nlklzhetetlen s igen hasznos rszt kpezik. Segtsgkkel - ha az ismtld kdrszekre fggvnyt runk - sszetettebb kdonk jelentsen lervidthet, amit tetszs szerinti helyekrl hvhatunk meg. A PHP mindig rendelkezsre ll beptett fggvnyei is sok munktl kmlhetnek meg.

Mi a fggvny?

A fggvnyek nll kdrszletek, amik csak akkor futnak le, ha erre a meghvsukkal utastst adunk - de egy fggvnyt egy programon bell akr tbbszr is lefuttathatunk. Futsuk kzben a bemenetkn t kzlt adatokat feldolgozzk s az eredmnyt a kimenetre tovbbtjk. A teljes program a fggvnyt egy zrt doboznak tekinti, amivel a be- s a kimenetn keresztl kommunikl.

A fggvnyek alapvet szintaxisa edig gy nz ki:

<?php

function fuggvenyem(adat_bemenet)
   {
   ... fggvny trzs ...
   ... itt dolgozza fel az adatokat ...
   
   return kimenet;   // a feldolgozs eredmnye megjelenik a kimeneten
   }

?>

Kzel 4000 gyakrabban hasznlt fggvny elre definilt a PHP-ban, ezeknek teljes listjt a PHP kziknyv tartalmazza itt. Ugyanitt minden fggvny helyes hasznlatt is bemutatjk.
Specilis clra definilhat a programoz is fggvnyt. Tovbbiakban ezeken keresztl mutatjuk be a fggvnyek hasznlatt.

fel...

Felhasznl ltal definilt fggvnyek

Nzzk az elz pldnkat egy mkd fggvny kpben:

<?php

function fuggvenyem($bemenet)
   {
   $kimenet = $bemenet * 2;   // itt csinl valamit a bemeneti adattal
   
   return $kimenet;   // az eredmny megjelenik a kimeneten
   }

?>

Mit ltunk?

  • A fggvnydeklarcit mindig a function szval vezetjk be.
  • Ezutn megadjuk a fggvnynk nevt - fggvnyknt mg nem szerepl nevet vlasszunk a vltoznv kpzs szablyai szerint.
  • Vgl egy kerek zrjel pr () tartalmazza a bemeneti adatokat.
  • A fggvny kdjnak lefutsval keletkezett eredmnnyel fog a fggvny visszatrni a fggvnynk.

A fggvny csak akkor fog lefutni, amikor azt a programban valahol meghvjuk, pldul gy:

<?php

$a = 12;
print $a . " duplja: " . fuggvenyem($a);

?>

Ltjuk: itt hvjuk meg a fggvnyt, bemeneteknt megadtuk az $a vltozt, amit a fggvny bellrl mint bemeneti adatot lt. Lefut a kdja s az eredmnyt a return kifejezsbe teszi. Kvlrl a program ezt az rtket ltja azon a helyen, ahova a fggvnyt behelyettestettk (hisz azt mr megbeszltk hogy a fggvnyt a program egsze egy zrt dobozknt kezeli, nem lt bele).

A pldt mkds kzben is megnzheted itt (10/1. plda).

fel...

Bemeneti adatok

A fggvny a krnyezettl a bemenetn keresztl kapja meg a feldolgozand adatokat. Ezeket a fggvny neve utni kerek zrjel-pr kz kell berni. Bemeneti adatot nem ktelez megadni - ez esetben csak az res zrjelpr szerepel - illetve megadhat egy, vagy tbb bemeneti paramter is. Tbb paramter esetn azokat vesszvel kell elvlasztani. A bemeneti paramterek brmilyen adattpusak lehetnek.

Br a zrjeleket mindig ktelez kitenni, nhny beptett PHP fggvny azrt kivtel ez all. Pldul a print(), include() fggvnyek hasznlhatk zrjelekkel s anlkl is. (Ez azon kivtelek egyike is, ahol nem lehet tapasztalni a programnyelv mshol szigor logikjt.)

Habr alaprtelmezetten a fggvnynek tadott vltoz rtk msolata kerl a fggvny bemenetre s annak fggvnyen belli vltozsa nincs hatssal a vltoz eredeti rtkre, itt is mdunk van ettl eltrni. A mdszert korbban mr megismertk: a & jellel itt is hivatkozhatunk az eredeti vltozra. Ilyen esetben a vltoz fggvnyen belli mdosulsa hatssal lesz az eredeti vltoz rtkre is.

<?php

function fgv_extrakkal(&$string)
   {
   $string .= "s a szksges plusssz.";
   }

$str = "Ez egy karakterfzr, ";
fgv_extrakkal($str);
print $str;   // kirja: Ez egy karakterfzr, s a szksges plusssz.

?>

A pldt mkds kzben is megnzheted itt (10/2. plda).

A paramtereknek lehet alaprtelmezett rtke is. Ha nem adunk meg ilyen paramtert a fggvny hvsakor, akkor a annak lefutsakor az alaprtelmezett rtkkel fog szmolni.

<?php

function kavet_csinal ($tipus = "cappucino")
   {
   return "Csinlok egy pohr " . $tipus . "t. <br />\n";
   }

print kavet_csinal ();             // kirja: Csinlok egy pohr cappucinot.
print kavet_csinal ("espresso");   // kirja: Csinlok egy pohr espressot.

?>

A pldt mkds kzben is megnzheted itt (10/3. plda).

Az alaprtelmezett rtkkel rendelkez paramtereket a paramterlista vgre kell tenni:

function fuggvenyem($egy, $ketto, $harom = "hrom")

fel...

A fggvny visszatrsi rtke

A fggvny kimenetn megjelen rtket a fggvny visszatrsi rtknek nevezzk.

A fggvny az elvgzett mvelet eredmnyt a return kifejezs segtsgvel adhatja t a programnak a beilleszts helyn, de az eredmny jelentkezhet az egsz programon kvl is, pldul a print() segtsgvel (ami maga is egy fggvny) a paramtereknt megadott karaktersort kirja a kpernyre - azaz kzvetlenk a HTML kimenetre kldi - vagy akr fjlba r, kukit helyez el, vagy brmi mst csinl.

A return-al tadott visszatrsi rtk brmilyen tpus lehet.

A return elrsekor a fggvny tadja a vezrlst a program soron kvetkez rsznek. Ha nincs return utasts, akkor a fggvny kimeneti rtke az utols kirtkelt kifejezs rtke lesz.

Az albbi gyakorlatiasabb pldnak nincs return utastsa, a kimenetet a print() sagtsgvel a kpernyre kldjk.

<?php

function paros($bemenet)
   {
   if ($bemenet % 2 == 0)
      print "A " . $bemenet . " pros szm. <br />\n";
   else
      print "A " . $bemenet . " pratlan szm. <br />\n";
   }

paros(1);
paros(2);
paros(3);
paros(4);
?>

A pldt mkds kzben is megnzheted itt (10/4. plda).

Ha a fggvnynek referencival kell visszatrnie, akkor az & referencia opertort kell alkalmaznod a fggvny deklarskor s a a visszatrsi rtk megadsakor is.

<?php

function &referenciat_ad_vissza()
   {
   return &$valtozo;
   }

$hivatkozas = &referenciat_ad_vissza();

?>

fel...

Vltozk hatkre a fggvnyben

Mr emltettk, alapelv, hogy a programunk szmra a fggvny egy nll egysg, egy "fekete doboz", ami csak a bemenetn s a kimenetn keresztl kommunikl a krnyzetvel.
Ennek a kvetkezmnye, hogy a program kvlrl nem ltja a fggvnyen bell ltrehozott vltozkat, a bemenetn beadott vltozk mdostsait. Igaz viszont, hogy a fggvnyen bellrl sem ltszanak a programkrnyezet kls vltozi. Ez a jellemz sokszor jl jhet, mert nem kell gyelnnk a klnbz fggvnyekben s az egsz programban lv azonos nev vltozk tkzsre.

A global kolcssz:
Nha azonban jl jnne, ha bizonyos vltozkat mgis el lehetne rni a fggvnyen bell is.
Erre talltk ki a global kulcsszt, mint kivtel-kezelst. A problma szemlltetsre nzzk meg ezt a pldt:

<?php

function korod()
   {
   print "1-letkorod: " . $kor . " v.\n";
   }

$kor = 15;
print korod();

?>

A kd eredmnye itt lthat (10/5. plda).

Amint ltjuk, nem ltunk semmit. Azaz a fggvny nem ltja a $kor vltozt, mert az a fggvnyen kvl van. De ha hasznljuk a global kulcsszt, mindjrt megjavul a kdunk:

<?php

function korod2()
   {
   global $kor;
   print "2-letkorod: " . $kor . " v.\n";
   }

$kor = 15;
print korod2();

?>

Nzzk meg ezt is (10/6. plda).

A magyarzat egyszer: a global kulcsszval globliss tettk a fggvnynk szmra a megnevezett krnyezeti helyi vltozt. Tbb vltozt is felsorolhatunk a global kulcssz utn egymstl vesszvel elvlasztva ket.

A globlis s szupergloblis vltozk (ilyenek pldul a $_GET, $_POST, $_COOKIE...) elrhetk a global kulcssz nlkl is.

A static kulcssz:
A fggvny minden hvsa kezdetekor egy alaphelyzetbl indul. Ha egy programban tbbszr hvjuk meg ugyanazt a fggvnyt, elfordulhat, hogy szksgnk lenne a legutols futskor felvett llapot megrzsre, pldul, ha valamit megszmolunk.
Erre knl a PHP egy kiegszt lehetsget, a static kulcsszval. A trolni kvnt adatot megjegyzi s a fggvny kvetkez futsakor nem az alaprtelmezettel, hanem az utoljra belltottal fog szmolni.

Az albbi pldban bekezdseket fogunk sorszmozni ezzel a mdszerrel.

<?php

function szamozott_sorok($szoveg)
   {
   static $hivasok_szama = 0;   // alaprtelmezett rtk
   $hivasok_szama++;            // nveljk eggyel
   print $hivasok_szama.". sor - ".$szoveg."<br />\n";
   }

// a fggvnyt tbbszr is meghvjuk:
szamozott_sorok("valami szveg");
szamozott_sorok("akrmi stveg");
szamozott_sorok("brmi szveg");

?>

Fejezetnk utols pldjt itt lthatjuk mkds kzben. (10/7. plda).

===>
adat bemenet
f g g v n y ===>
eredmny kimenet
 

Bejelentkezs
Felhasznlnv:

Jelsz:
SgSg
Regisztrci
Elfelejtettem a jelszt
 
XHTML
 
Linkek

Freewebsite
Programozs.lap.hu
Webmester.lap.hu

 

* Beugrós munkavállalók éjjel-nappal. * Beugrós munkavállalók éjjel-nappal. * Beugrós munkavállalók éjjel-nappal. *    *****    Elindult a Játék határok nélkül rajongói oldal! Ha te is szeretted a '90-es évek népszerû mûsorát, nézz be ide!    *****    Megjelent a Nintendo Switch 2 és a Mario Kart World! Ennek örömére megújítottam a Hungarian Super Mario Fan Club oldalt.    *****    Homlokzati hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168    *****    A PlayStation 3 átmeneti fiaskója után a PlayStation 4 ismét sikersztori volt. Ha kíváncsi vagy a történetére, katt ide!    *****    A Bakuten!! az egyik leginkább alulértékelt sportanime. Egyedi, mégis csodálatos alkotásról van szó. Itt olvashatsz róla    *****    A PlayStation 3-ra jelentõsen felborultak az erõviszonyok a konzolpiacon. Ha érdekel a PS3 története, akkor kattints ide    *****    Új mese a Mesetárban! Téged is vár, gyere bátran! Mese, mese, meskete - ha nem hiszed, nézz bele!    *****    Az Anya, ha mûvész - Beszélgetés Hernádi Judittal és lányával, Tarján Zsófival - 2025.05.08-án 18:00 -Corinthia Budapest    *****    &#10024; Egy receptes gyûjtemény, ahol a lélek is helyet kapott &#8211; ismerd meg a &#8222;Megóvlak&#8221; címû írást!    *****    Hímes tojás, nyuszipár, téged vár a Mesetár! Kukkants be hozzánk!    *****    Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168    *****    Nagyon ütõs volt a Nintendo Switch 2 Direct! Elemzést a látottakról pedig itt olvashatsz!    *****    Elkészítem születési horoszkópod és ajándék 3 éves elõrejelzésed. Utána szóban minden kérdésedet megbeszéljük! Kattints    *****    Könyves oldal - egy jó könyv, elrepít bárhová - Könyves oldal    *****    20 éve jelent meg a Nintendo DS! Emlékezzünk meg ról, hisz olyan sok szép perccel ajándékozott meg minket a játékaival!    *****    Ha érdekelnek az animék,mangák,videojátékok, japán és holland nyelv és kultúra, akkor látogass el a személyes oldalamra.    *****    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!    *****    Könyves oldal - Ágica Könyvtára - ahol megnézheted milyen könyveim vannak, miket olvasok, mik a terveim...    *****    Megtörtént Bûnügyekkel foglalkozó oldal - magyar és külföldi esetek.