Invata PHP cu punctsivirgula.ro

I. Introducere
II. Notiuni de baza
III. Notiuni avansate
IV. Aplicatii
V. Extra
C O N T I N U T
Functii in PHP

Functii in PHP    4 ! 

Functiile sunt blocuri de cod PHP (secvente de cod) bine delimitate si identificate printr-un nume, ce executa un set de operatii. Functiile pot fi executate de mai multe ori in cadrul unui script prin simpla apelare a numelui lor.

Exista functii predefinite, specifice limbajului PHP (cum ar fi print, empty, etc) ce poti fi folosite in orice moment, fara a fi nevoie de vreo actiune speciala; si exista functii definite de utilizator, scrise practic de programatori. Pentru ca acestea sa poata fi folosite este nevoie sa fie declarate (si implementate).

Exemplu de functie definita de utilizator:

<?php
 
# functiile se declara folosind cuvantul cheie "function" urmat de numele functiei
# numele functiei trebuie sa fie orice identificator valid (adica sa inceapa cu 
# litere sau cu caracterul _ ) si sa nu contina caractere speciale sau spatiu
# dupa numele functiei se pun paranteze rotunde
# corpul functiei (implementarea) trebuie incadrata in acolade
function afisLuna()
{
	$luni = array( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
		'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
	echo '<select>';
	for( $i = 0; $i < 12; $i++ ) {
		# intrucat se cunosc nr de pasi, se foloseste structura repetitiva for
		echo "<option>{$luni[ $i ]}</option>\n";
	}
	echo '</select>';
}
 
# mai jos vom folosi functia pentru a afisa un drop-down cu lunile anului:
echo 'Luna inceperii activitatii: ';
afisLuna();
 
echo '<br /><br />Luna terminarii activitatii: ';
afisLuna();
 
?>

Rezultatul codului PHP este reprezentat mai jos:

Luna inceperii activitatii: 

Luna terminarii activitatii:

Am scris, asadar, o singura data codul care afiseaza lunile anului si l-am apelat de cate ori am avut nevoie. Apelarea functiei se face prin specificarea numelui urmat de paranteze. Intre paranteze se pot specifica parametrii, dupa cum vom vedea mai jos. Alternativ, o functie definita de utilizator se poate apela folosind instructiunea call_user_func

# vom rescrie ultima parte a codului
echo 'Luna inceperii activitatii: ';
call_user_func( 'afisLuna' );
 
echo '<br /><br />Luna terminarii activitatii: ';
call_user_func( 'afisLuna' );

Instructiunea call_user_func este utila atunci cand numele functiei este furnizat de o variabila, cu ajutorul caruia se poate apela dinamic o functie. Exemplu:

<?php
 
# definesc 2 functii diferite
function unu() {
	print 'Azi suntem in intai!<br />';
}
 
function alta() {
	print 'Azi e o zi obisnuita<br />';
}
 
# declar o variabila care sa aiba ca valoare numele functiei
$functie = 'unu';
 
# variabila $functie poate sa se schimbe in functie de diferite conditii
# in cazul nostru, daca ziua curenta e prima zi din luna, valoarea va fi 'unu'
if( date( 'd' ) == 1 ) $functie = 'unu';
else $functie = 'alta';
 
# la final apelez dinamic functia data de variabila
# Interpretorul nu stie exact care functie va fi - el doar executa ce-i transmite variabila
 
# eventual pot face niste validari:
#  - function_exists verifica daca functia transmisa a fost definita
#  - is_callable verifica daca variabila transmisa poate fi apelata ca functie
 
if( function_exists( $functie ) && is_callable( $functie ) ) {
	call_user_func( $functie );
} else {
	echo "Nu pot apela functia $functie";
}
// Rezultat (live): Azi e o zi obisnuita
?>

Foarte important de stiut este faptul ca variabilele definite in afara functiilor nu sunt disponibile in interiorul lor. Astfel, codul de mai jos nu va functiona asa cum ne asteptam:

<?php
 
# declar o variabila
$a = "Afara e frumos";
 
# definesc o functie
function afisMesaj() {
	echo $a;
}
 
# apelez functia
afisMesaj(); // nu va afisa nimic!!
 
?>

Functia nu va afisa mesajul, asa cum v-ati fi gandit la prima vedere. Asta pentru ca ce este definit in afara functiei nu este recunoscut in interior. In mod similar, variabilele definite in interiorul unei functii se pierd si NU sunt disponibile in afara acesteia.

Exista totusi o modalitate prin care variabilele definite in afara unei functii sa fie 'aduse' in interiorul ei: folosind intructiunea global.

<?php
 
# declar o variabila
$a = "Afara e frumos";
 
# definesc o functie
function afisMesaj() {
	# folosind cuvantul 'global' ii spun interpretorului PHP ca  
	# vreau sa folosesc o variabila din afara functiei
	global $a;
	echo $a;
}
 
# apelez functia
afisMesaj(); // va afisa Afara e frumos
 
?>

Daca e nevoie sa se foloseasca mai multe variabile globale in cadrul unei functii, acestea se pot specifica toate intr-o singura instructiune global:

global $a, $b, $Vector;
Bytza a spus Folositor - 17.10.2012

Foarte folositor.
Multumesc frumos

titi a spus la obiect - 06.01.2013

ce dreaq tot comentati aiurea: foarte util,bravo,felicitari, vezi sa nu uiti sa iei marar din piata....
a comenta la un articol inseamna a te referii la subiectul acelui articol

Daniel a spus Exemplu cu functie predefinita - cel mai mic numar dintr-un sir - 27.02.2014

<?php
$sir=array(9,5,7,6,8,3,4);
function mic()
{
$sir=array(9,5,7,6,8,3,4);
sort ($sir);
print_r ($sir[0]);
}
print "cel mai mic numar din sir este: ";
mic();
?>

Afiseaza: cel mai mic numar din sir este: 3

Daniel a spus My mistake - 27.02.2014

"exemplu de functie definita de utilizator"


Adauga un comentariu la aceasta sectiune.

 


De ce sunt folosite functiile?    2 ! 

Printre avantajele folosirii functiilor, se numara:

  • reutilizarea codului
    Spre exemplu, daca este nevoie sa se execute aceeasi secventa de cod in mai multe parti ale unui programm sau script, pentru a nu se rescrie codul de fiecare data, se defineste o functie care este apelata de mai multe ori, asa cum am facut in primul exemplu de mai sus

  • modularizare
    Odata cu aparitia functiilor (a subprogramelor, in general) s-a introdus si conceptul de modularizare care presupune impartirea (spargerea) problemei ce trebuie rezolvata in probleme mai mici. Fiecare modul problema mai mica reprezinta un subprogram, implementat intr-o functie care contribuie la rezultatul final.
    Spre exemplu, avem o operatie (relativ) complexa: afisarea inbox-ului unui utilizator. Aceasta problema poate fi impartita in parti mai mici/simple. Pentru fiecare parte s-ar defini cate o functie in loc sa se scrie un singur script foarte mare, iar la final codul va arata cam in felul urmator:
    preluareDateAutentificare();
    verificareDate();
    preluareMesajeInbox();
    afisareInbox();
  • mentinerea usoara a codului si intelegerea mai usoara a logicii aplicatiei sau a scriptului
    Acestea sunt urmari imediate ale primelor 2 puncte. Daca scriptul este structurat, impartit in bucati mai mici, in care aceleasi secvente de cod nu se repeta atunci va fi mai usor si de inteles si de modificat sau intretinut.
vLAdwTZ a spus Optimizare - 02.12.2010

Salut. Am dat peste acest tutorial superb si nu am incetat sa il citesc deloc. Am ajuns deocamdata la acest capitol.
In ultimul timp m-a procupat optimizarea codului php daca intelegeti. As dori daca s-ar putea sa initiati un capitol care sa cuprinda mai multe indicii care sa duca spre functionarea mai rapida, optima si care sa consume mai putine resurse ale serverului.
Felicitaru pentru munca depusa:)

Larisa a spus tutorial - 28.01.2014

acum fac un curs de PHP din care nu reusesc sa inteleg nimic
tutorialele d-voastra imi sunt de mare ajutor
ar fi si mai bine daca, pe langa exemple ar fi si exercitii
ma refer la exercitii care sa aiba un inteles in lumea reala - noi la curs facem exercitii NUMAI cu a si b, 1 si 2 sau denumiri generice
nu pot sa-mi reprezint locul in care as putea sa folosesc notiunile invatate - de exemplu: formulare, meniuri, etc


Adauga un comentariu la aceasta sectiune.

 


Valori returnate. Parametri    7 ! 

De multe ori este nevoie ca o functie sa returneze o valoare. Majoritatea functiilor predefinite fac lucrul asta; spre exemplu empty returneaza TRUE sau FALSE in functie de starea si continutul unei variabile transmise ca parametru.

Si functiile definite de utilizator pot returna o valoare, cu ajutorul instructiunii return. Exemplu:

<?php
 
function formatareData() {
	$rezultat = date( 'd-m-Y' );
	return $rezultat;
}
 
# rezultatul returnat de functie poate fi folosit in diferite moduri:
$azi = formatareData(); // atribuirea rezultatului
print formatareData(); // afisarea rezultatului
formatareData(); // rezultatul nu este folosit - daca functia nu printeaza ceva
// atunci apelul nu are nici un efect vizibil
 
?>

De asemenea, functiile pot primi date ce pot fi folosite in interiorul lor pentru diverse prelucrari. Aceste date de intrare sunt transmise sub forma de parametri.

Pentru ca o functie sa poata primi parametri, aceasta trebuie sa ii declare intre parantezele rounde, ca in exemplul de mai jos

<?php
 
# functia este declarata sa primeasca 2 parametri ce vor fi prelucrati
# functia returneaza si o valoare, in functie de datele de intrare
function minim($a, $b) {
	if( $a < $b ) return $a;
	else return $b;
}
 
# la apelul functiei, este obligatoriu sa se transmita 2 parametri
# parametrii pot fi orice expresie (variabile, constante, rezultatul altor functii, etc)
 
print minim( 3, 4 ); // parametrii sunt 2 valori numerice
 
$x = 1; $y = 4;
print minim( $x, $y ); // parametrii sunt 2 variabile
 
$x = 4; $a = 3; $b = 5;
print minim( $x, minim( $a, $b ) ); // parametrii primului apel sunt: variabila $x
// si rezultatul unui alt apel cu 2 parametri diferiti
 
?>

Nota: intrucat functia minim() returneaza o valoare, ea poate fi folosita ca si cum ar fi un numar normal. De aceea apelul de mai sus este valid. Alte exemple valide sunt mai jos:

<?php
 
$a = 1 + minim( 4, 3 );
 
if( minim( $a, 4 ) > 5 ) { echo "If-ul este True"; }
else { echo "If-ul este False"; }
 
?>

O facilitate avansata oferita de limbajul PHP este folosirea valorilor predefinite pentru parametrii functiilor. Aceasta permite ca o functie sa nu fie apelata cu toti parametrii ei, urmand ca pentru valorile care lipsesc sa fie folosite valorile predefinite. Functia minim() definita mai sus poate fi rescrisa in felul urmator:

<?php
 
function minim($a = 1, $b = 2) {
	if( $a < $b ) return $a;
	else return $b;
}
 
?>

Declararea functiei de mai sus se traduce in felul urmator: daca functia minim() nu este apelata cu toti parametrii, atunci foloseste valoarea 1 pt $a si valoarea 2 pt $b in calculele din interiorul functiei. In acest caz, functia se poate apela in felul urmator:

<?php
 
echo minim(); // echivalent cu echo minim(1,2);
echo minim(7); // echivalent cu echo minim(7,2);
echo minim(7,8); // apel normal cu toti parametrii
 
?>
maximilian a spus felicitari - 06.09.2009

felicitari pentru exemplele despre functii!

Don De a spus Excelent - 30.09.2010

Foarte inteligibil...

eizo a spus functii - 14.02.2011

unde gasesc functiile in aardvark topsites ?

stefan a spus mesaj - 30.11.2012

sooper

Domuta Marcel a spus Afisarea lunilor anului - 18.09.2013

Salut!

La afisarea lunilor anului este o functie mult mai simpla decat for();

Un exemplu ar fi cam asa:

$LuniAn = array ('Ian', 'Feb', 'Mar');

foreach ($LuniAn as $lunileAnului) {

echo $lunileAnului, "<br />";
}

Bafta in continuare, au multi de invatat de la voi (poate chiar si eu la un moment-dat) :)

laur a spus parametri - 27.09.2015

Articulat: parametrii. Exemplu: Parametrii au fost introdusi.
Neatriculat: parametri. Exemplu: Lipsesc niste parametri.

Gheorghe a spus Neatriculat - 16.09.2016

*Iaur* "Neatriculat" :)
Daca tot esti pus pe observatii.
*Domuta Marcel*
Exemplul cu lunile anului a fost dat ca sa inteleaga, mai usor cei ca tine. Continutul functiei poate fi mult mai complex, (si de regula e)
Si nu in ultimul rand, felicitari pentru tutorial si fi sigur ca celor care vreau (si pot) sa invete php le e foarte util.


Adauga un comentariu la aceasta sectiune.

 


Facilitati avansate referitoare la functii    3 ! 

Pe langa functionalitatile standard, explicate mai sus, limbajul PHP dispune de alte caracteristici mai avansate. Astfel, pot fi definite functii ce pot primi oricati parametri este nevoie, pot fi executate functii de fiecare data la terminarea executiei unui script PHP, etc. Acestea nu sunt insa lucruri folosite de zi cu zi, asa ca prezentarea lor depaseste scopul acestui site. Nu trebuie sa le invatati acum, ci doar sa stiti ca exista.

Mai jos amintite sunt cateva din functiile avansate ce pot fi folosite:

  • call_user_func - alternativa pentru apelul simplu al unei functii definite de utilizator; numele functiei poate fi stocat intr-o variabila, programatorul putand astfel apela functii diferite in situatii diferite
  • call_user_func_array - la fel ca ma sus, doar ca este folosita atunci cand functia ce trebuie apelata are mai mult de un parametru
  • function_exists - folosita pentru a verifica daca o functie este definita
  • create_function - folosita pentru a defini o functie 'on the fly', atunci cand codul PHP se executa
  • register_shutdown_function - folosita pentru a specifica o functie care sa se execute la finalul executiei codului PHP
  • func_num_args, func_get_args, func_get_arg - functii ajutatoare folosite in cazul functiilor apelate cu un numar variabil de parametri
Alexandru a spus Facilitati avansate - 09.04.2009

Facilitatile avansate legate de functii probabil ca nici nu va vor folosi pana nu veti incepe sa lucrati la aplicatii mai complexe (de multe ori nici in acest caz). E suficient doar sa stiti ca exista.

Mihai a spus interval de timp - 11.07.2010

Cum fac o functie sa fie apelata la un interval de timp. Am vazut ca ati precizat in exemple. Mi-ar fi de folos.

Alexandru a spus interval de timp - 28.07.2011

Sincer, am retractat informatia. Se poate apela o functie cu o intarziere, sau mai exact spus se poate amana (intarzia) executia unui script cu un numar de secunde, dar nu se poate apela o functie la intervale regulate de timp, in mod continuu. Arhitectura si mediul de executie nu o permite (ar insemna ca un request catre o pagina web sa poata dura la nesfarsit). Imi pare rau pentru confuzie :)


Adauga un comentariu la aceasta sectiune.