PHPműhely.hu

PHP, Javascript, Webprogramozási Fórum

A saját készítésu függvényekrõl (function() )

PHP Cikkek, segédletek

A saját készítésu függvényekrõl (function() )

HozzászólásSzerző: Bonjasky » 2011.12.01. 20:46

A saját készítésu függvényekrõl (function() )

A függvény olyan feladatokat gyujt össze, amit sokszor kell hasonló adatokkal lefuttatnunk. Ami tartalmazhat az elozo leckékben megtanult feltételeket, HTML kódokat, lezárt PHP blokkokat beletéve HTML kódokat. Egy kis pluszt kell hozzá megtanulni, hogy külön környezet hozunk létre egy függvényen belül, és amit kimenetet készítünk vele visszatérhet. Itt egy átlagos függvény:

Kód: Egész kijelölése
<?php $a="alma"; function irjunk_ki_valamit$valtozo) { echo "A változó értéke: " $valtozo; echo $a; } irjunk_ki_valamit("ez egy unalmas rész"); ?>

Mit kell róla tudni:

-A függvényeket a function kulcsszó után írva deklarálhatjuk, ezzel meghatározzuk milyen bemeneti argumentumai lesznek. -Az (egyszerubb) függvényen belül csak azok a változók érhetoek el, amiket argumentumon keresztül bevittünk. -A függvényeinket belül minden olyan globális változó él, amit úgy hívunk: szuperglobálok. -A szuperglobálok a $GLOBALS , $_SERVER , $_GET , $_POST , $_FILES, $_COOKIE, $_SESSION, $_REQUEST , $_ENV - echo $a; nem fog kimenetet adni, ugyanis $a nem létezik a függvényen belül, mert $a nem globális változó. Így amikor ezekre szükségünk van, elég csak az index nevüket elküldeni a függvényünknek. Csináljunk egy függvényt, ami egy $_POST változó meglétét ellenorzi:

Kód: Egész kijelölése
<?php function teszt$valtozo $kotelezo $hibauzenet) { if(empty( $_POST[$valtozo] ) AND $kotelezo==1) return $hibauzenet; } $hiba ''$hiba .= teszt("felhasznalonev" "A felhasználó megadása kötelezo"); ?>
Hogy is van ez? 3 argumentuma van a függvényünknek, egyik ami megmondja milyen $_POST indexet várunk, hogyha kotelezo kitölteni a második argumentum kap egy 1-es értéket, a $hibauzenet pedig egy olyan szöveg, amit hiba esetén visszaadunk a return operátorral. A $hiba értékét inicializáltuk, majd a <b>.=</b> összefuzo operátorral hozzáadtuk a $hiba sztringünkhöz. Mi történik, hogyha $kotelezo értékét 0-ra változtatjuk? Akkor azt mondjuk a függvényünknek amikor lefut, hogyha az IF feltétel mindkét oldala igaz, csak akkor adjon vissza hibaüzenetet. És mivel az AND feltételnél mindkét oldalból biztosan hamis a $kotelezo, ezért mindegy hogy üres-e vagy kitöltött-e a $_POST indexünk. Hogyha a return operátorral visszatért a függvényünk, érdemes még ki is írni azt? Ez az adott feladattól függ, de többnyire elég csak visszatérni egy szövegként vagy tömbként és azt feldolgoznunk.. Kérdezhetnénk, miért nem a függvényen belülre tettünk egy $hiba változót, miért nem jó kívülrol létezo változónak értékeket adni? - Azért, mert mi szeretjük az elonyeit a külön környezetu függvényeknek és ahhoz hogy ezt megtegyük, a függvényen belül azokat a változókat amiket a függvényen kívülrol is elérhetové akarjuk tenni globálissá kell tennünk. Például:

Kód: Egész kijelölése
<?php $szamlalo=0; function novelo() { global $szamlalo$szamlalo++; } novelo(); novelo(); ?>

Kétszer lefutott a függvényünk, már a számláló változónk értéke 2. Ha kiírjuk láthatjuk is. Ez így egyszerubbnek is látszik, de ez azt feltételezi, ahol még ezt a függvényünket felhasználjuk a $szamlalo értéke él. Olyan függvényeket kell tudnunk csinálni, ami minden külso változótól független. Írunk egy form hibakezelo rendszert, és ettol kezdve a $hiba tömbünket, bemeneti változóinkat mindig ugyanúgy kéne neveznünk, egy csoportban elkészült projektnél egyeztetni kéne a változóneveinket, amiket használunk, ez sok bonyodalmat okozna. Olyan függvényeket érdemes csinálnunk, ami lemásolása után egy akármilyen másik környezetbe ültetve muködik. Páldául egy lapozó függvény mysql táblákhoz jó példa erre. EGyszer megírsz egy függvényt, kis módosítással sok ideig jó lesz még. Meghívhatunk általunk készített függvényeket egy függvényen belül? -Ez a strukturáltság alapja! Készítsünk egy olyan függvényeket, ami elkészít egy formot, és beviteli mezoket submit gombot, és az értékeket is visszaírja és egy függvényhívással akármikor meghívható! Ez még csak ízelíto amikre még lehet használni a függvényeket. Mert miért írjunk le többször egy beviteli-mezo HTML kódját, ha ilyen kis függvényekkel kevesebbet kell gépelnünk? Kezd a tanulást kis függvényekkel, ne akard 1 perc alatt megváltani a világot! Mert egy rejtett mezonek vagy egy többelemes legördülolistának kevés hasonló argumentuma van. Ez még egy belátható példa mezokészítésére.

Kód: Egész kijelölése
<?php function mezo($valtozo $cimke $ertek='' $tipus 'text') { /*
hogyha az érték üres , és be van
állítva az adott változónévvel a
$_POST tömb */ 
if ($ertek=='' AND isset($_POST[$valtozo])) $ertek htmlspecialchars(stripslashes($_POST[$valtozo])); //
az $ertek változónak értéket adunk echo
$cimke.'<br /><input type="' $tipus '" name="' $valtozo
'" value="' $ertek '" /><br />'."\n"; } function form(
$tipus $action='') { if ($tipus == 1) echo '<form action="' .
$action '" method="post">'."\n"; elseif ($tipus == 0) echo
'</form>'."\n"; } function formkeszito() { form(1);
mezo("felhasznalo" "Felhasználónév");
mezo("jelszo" "Jelszó" "" "password"); mezo("kor" ,
"Korod"); mezo("mehet" "" "Mentés" "submit"); form(0); }
formkeszito(); ?>




Amint kicsit belejössz a függvények gyártásába, egy ilyesmi hasznos függvényt te is elkészíthetsz ha egy formot szeretnél gyártani. -Az argumentumoknál van mód változó érték megadására, ilyenkor azt az adott argumentumot nem kötelezo a meghívásnál megadni. Egy függvény csinálhat többféle feladatot? Értelmes kereteken belül igen. Ha az elágazásokat figyeled a form() függvénynél, elso argumentumként megmondtam neki, hogy a form elejét vagy a form végét szeretném elkészíteni. Az elozoekben leírtam, hogy nem kötelezo az echo -t használni ha kimenetet akarunk készíteni, hanem egy változónak értékéül adhatjuk. Gondoljunk el egy nagyon egyszeru urlapkészítot, ami ellenorzi a hibásan kitöltött mezoket (ha kötelezo megadni az értékét de csak posztolás során tegye az ellenorzést).
Avatar
Bonjasky
Adminisztrátor
 
Hozzászólások: 471
Csatlakozott: 2011.10.30. 23:30

Vissza: Segédletek

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég

cron