![]() |
|
||||||||||||||||
![]() |
||||||||||||||||
Pràctica |
![]() |
Exercicis
|
||||||||||||||
|
|||||||||||||||
Funcions | |||||||||||||||
L'objectiu d'aquesta pràctica és veure la implementació que el PHP fa de les funcions. El PHP té una gran quantitat de funcions que ens permeten dur a terme tasques molt diverses. Hi ha, a més, la possibilitat que l'usuari es creï les funcions que necessiti. | |||||||||||||||
Funcions del llenguatge | |||||||||||||||
![]() |
El PHP té, com hem dit, una gran quantitat de funcions definides. Podem trobar funcions per a la comunicació amb les diferents bases de dades, matemàtiques, per treballar amb cadenes, amb dates, amb matrius, amb correu, amb ftp, etc. A la pàgina del PHP, a l'adreça: http://www.php.net/manual/es/funcref.php, us podeu fer una idea de la gran quantitat de funcions, classificades temàticament. Igualment, a la casella search for podreu buscar qualsevol funció i hi trobareu la sintaxi, els paràmetres requerits i què retorna. Les funcions definides per l'usuari en PHP actuen de manera semblant a d'altres llenguatges. Es tracta de fragments de codi als quals podem enviar paràmetres i que poden retornar algun valor o fer alguna tasca concreta. Utilitzar funcions és una bona idea pel que tenen de reutilització de codi i pels avantatges que comporta en el procés de depuració. |
||||||||||||||
![]() |
Recordeu que a mòdul 1, a la pràctica 6 i la pràctica 7, hem vist com instal·lar la referència de PHP en format d'ajuda de Windows en els dos editors explicats (Maguma i HAPedit). Podeu trobar-hi les funcions de PHP ordenades per temes i, a més, quan us col·loqueu sobre el nom de les funcions escrites en el codi, apareix dinàmicament una ajuda amb la seva sintaxi. | ||||||||||||||
Declaració i paràmetres | |||||||||||||||
Cal declarar la funció abans de qualsevol crida que se'n vulgui fer. En l'exemple següent veurem com definir una funció, així com la utilització d'algunes de les funcions de cadena estàndards. Ho posarem en pràctica definint la nostra funció TornaNom, que retornarà el nom i els cognoms que li passem amb tres possibilitats de conversió:
|
|||||||||||||||
![]() |
Copieu el codi següent al vostre editor i deseu-lo amb el nom de m3p11.php. Comproveu-ne el funcionament i aneu seguint els comentaris posteriors i els del mateix codi. |
||||||||||||||
<?php // Definició de la funció // en funció de l'opció fem una cosa o altra...
//Comprovem que les variables estiguin definides amb funció isset() $opcio = "l"; $opcio = "m"; |
|||||||||||||||
Llistat 3.1.1. Declaració de funcions | |||||||||||||||
La definició es fa, com en altres llenguatges, donant el nom de la funció després de function i posant entre els parèntesis els paràmetres demanats. Al darrer paràmetre ($lletres)
li donem un valor per defecte ("U").
Això vol dir que si no li passem cap valor, la funció tirarà
endavant amb el valor definit. Podeu provar de no passar-li el quart valor
i veureu que no hi ha error. Proveu, en canvi, de no passar-li tampoc
el tercer. |
|||||||||||||||
![]() |
Fixeu-vos que els paràmetres als quals assignem un valor per defecte han d'estar col·locats al final de tot. | ||||||||||||||
Utilitzem algunes de les funcions estàndards per a la conversió de cadenes: strtoupper() (conversió a majúscules), strtolower() (conversió a minúscules), ucwords() (primera lletra de cada paraula en majúscula). | |||||||||||||||
![]() |
Observeu que les funcions strtoupper() i strtolower() no funcionen amb caràcters accentuats. Caldria, si ens interessés, definir una funció que "ampliés" també la conversió a les lletres accentuades. | ||||||||||||||
També hem utilitzat la funció isset(), que serveix per saber si una variable ha estat definida o no. En aquest cas, valorem mitjançant if si estan totes tres variables definides; en cas contrari, apareixerà un missatge d'advertència. Proveu de comentar la línia de declaració de la variable $nom, per exemple. La funció definida torna la nova cadena mitjançant la clàusula return. A la segona part del codi hi ha la "crida" a la funció
amb |
|||||||||||||||
Pas de paràmetres per referència | |||||||||||||||
El PHP permet passar els paràmetres de les funcions de tres maneres diferents:
El primer i segon cas són els que hem vist a l'exemple del llistat 3.1.1. Amb el pas per referència, aconseguirem que les modificacions en el valor d'una variable dins d'una funció continuïn vigents fora de la funció. Per indicar que passem el paràmetre per referència, cal que davant del seu nom posem ampersand (&) a la definició de la funció. En el codi següent veurem a la pràctica com passem variables per referència. Hi definim una funció Comprova() que rep tres paràmetres:
Per simular l'ús de la funció, definirem un for que anirà incrementant en 0,5 el valor de la nota simulada. A cada iteració de la funció es mostra la nota i els totals d'aprovats i suspesos. |
|||||||||||||||
<?php // Definim variables que recolliran el nombre de notes // Funció comprova()
|
|||||||||||||||
Llistat 3.1.2. Pas de paràmetres per refència a les funcions | |||||||||||||||
Copieu aquest codi a l'editor i deseu-lo amb el nom m3p12.php. Executeu-lo i observeu el resultat i com les variables $superen i $nosuperen van incrementant els seus valors. Comproveu com això no passa si traiem el signe & del davant de $aprovats o $suspesos en la definició de la funció. |
|||||||||||||||
Àmbit de les variables | |||||||||||||||
A la pràctica 2 del mòdul 2 hem parlat de les variables, però: què passa quan treballem amb variables dins de les funcions? Quin és el seu àmbit de validesa? Podem distingir dos tipus de variables pel que fa al seu àmbit:
Si volem que una variable que definim en una funció sigui global, cal que ho indiquem posant global davant de la seva definició. Això farà que estigui diponible de manera global. Les variables locals són les que definim dins d'una funció:
Una excepció a això últim són les variables locals estàtiques que definim posant static davant del nom de la variable. Aquest tipus de variable:
|
|||||||||||||||
Un exemple | |||||||||||||||
![]() |
Veurem un exemple en què utilitzarem tots tres tipus de variables dins d'una funció Mitjana(), definida per nosaltres mateixos. Aquesta funció recull un únic paràmetre que és un array (aElements) amb contingut de diferents valors numèrics. A partir d'aquests valors, calcularà la mitjana aritmètica i la tornarà. Copieu el codi que segueix en el vostre editor i deseu-lo amb el nom de m3p13.php. |
||||||||||||||
<?php $comptador = 0; // Definim funció Mitjana() que calcularà la mitjana d'un
array amb valors numèrics if (count($aElements) > 0) { $mitjana = $total / count($aElements); $comptador++; // incrementem variable global // Retorna la mitjana dels valors passats i també el nombre
$aElements = array(9,5,7,0,3,4,4,5,3,9); $aElements = array(9,6,7,8,3,4,4,5,3,9,8,2); |
|||||||||||||||
Llistat 3.1.3. Àmbit de les variables | |||||||||||||||
Si estudiem el codi veurem que, en primer lloc, definim la funció i després la cridem tres vegades consecutives. Això ens permetrà observar el comportamment dels diferents tipus de variable:
|
|||||||||||||||
![]() |
Una manera alternativa i més aconsellable de treballar amb les variables globlals és mitjançant $_GLOBALS. Es tracta d'un array associatiu que té com a clau el nom de les diferents variables globals. En el nostre cas, seria $_GLOBALS["comptador"]. | ||||||||||||||
![]() |
|||||||||||||||
|
|||||||||||||||