Llenguatge PHP: Conceptes¶
Sintaxi¶
Un script PHP s'executa en el servidor i el resultat de codi HTML
s'envia al servidor.
Bàsicament s'escriu en una pàgina .php, que el motor d'execució de l'Apache interpreta.
El codi o script PHP comença amb <?php
o acaba amb ?>
Una pàgina .php pot incloure tant codi HTML
com codi PHP
.
exemple1.php | |
---|---|
Les instruccions amb PHP
, s'acaben amb ; .
Usarem echo
per imprimir o generar codi HTML
segons el que indiquem.
Barrejar HTML
i PHP
exemple2.php | |
---|---|
Podem mostrar HTML
segons un codi PHP
exemple3.php | |
---|---|
NOTA
Si l'extensió del fitxer no és .php, no s'interpreta el codi i retornarà tal qual el codi
Comentaris¶
Un comentari a php
és una línia que no s'executarà, per tant no tindrà cap resultat. Per tant només és de lectura per un programador.
Els comentaris han de servir per:
- Explicar la lògica del codi, tant per un mateix programador, com altres persones
- Capçalera de l'arxiu de codi per ubicar a dins d'un projecte.
- Comentar una part de codi en etapa de prova i depuració de la lògica
php
.
Warning
En cap cas un codi comentat ha de quedar en presentació o explotació d'un codi php
Per comentar un codi php
ho podem fer amb:
//
comentari de codi d'una línia#
comentari de codi d'una línia/*
i*/
comentari de codi de vàries línies
Variables¶
Les variables ens serveixen per a guardar valors d'informació d'un tipus de dades. Per això diguem que són tipades, però al moment de declarar-les, no s'indica el tipus, sino que s'assigna el resultat d'una expressió que és d'un tipus. Es pot canviar el tipus de la variable cada vegada que s'assigna un nou valor.
Regles:
- Es declaren amb $ al davant i nom variable.
- S'hi assigna un valor amb =.
- Ha de començar amb un lletra o _
- No pot començar amb un número
- Ha de contenir A-Z,a-z, _
-
Són case-sensitive
$nom = "Judit";
Cal tenir present l'àmbit de les variables:
- local -> A dins d'una funció.
- global -> A qualsevol lloc del codi.
- static -> A dins d'una funció, però es manté valor.
NOTA
Pot ser bona tàctica per depurar una programa, anar inspeccionant els seus valors mentre s'executa el codi.
També podem usar la referència d'una variable amb els ímbol &
al davant.
Tipus¶
Totes les variable contenen un valor que és d'un tipus definit:
- boolean
- integer
- float (o double)
- string
i tipus composts:
- array
- object
i també especials:
- resource
- NULL
Podem fer coses com:
Observem
Si usem var_dump()
, podrem observar el valor i tipus assignat:
Constants¶
Una constant és un identificador que té un valor assignat que no variable
Per declarar-la: define(nom, valor, case-sensitive)
Podem usar unes constants predefinides.
Operadors¶
Els operadors són esencials per a crear i usar expressions en php.
Les expressions les usen per aplicar lògica al nostre codi desenvolupat
Tenim diversos coses a tenir en compte:
- Precedència: que pot fer variar el valor final
- tipus d'operadors: no és el mateix sumar que comparar:
- aritmètics: + - * / % **
- comparació: == === != <> < > <= => <=>
- lògics: and && or || xor !
- string: . .=
L'operador més usat és el d'assignació
En aquest exemple que sumarem el valor de la variable a la suma de b + 3
Alternatives¶
Formen part de la lògica d'execució d'un codi desenvolupat i anirà associat a una expressió que farà que s'executi un codi o no.
Normalment caldrà definir la condició, que serà una expressió lògica i les accions que executarà en cas d'avaluar-se a cert i les altres en cas de fals.
Seria un psedocodi similar a:
Obtenir Temperatura
SI (Temperatura < 0) LLAVORS
escriure "Està glaçant!"
SINO
escriure "S'hi està bé."
FSI
Tenim:
- if
- if else
- elseif / else if
- switch
Exemple:
exemple5.php | |
---|---|
Podem observar com diguem una frase o una altra depenent de l'hora del dia que s'executi el codi.
La sintaxi bàsica és:
sintaxis bàsica if | |
---|---|
sintaxis elseif | |
---|---|
Bucles¶
Formen part de la lògica d'execució d'un codi desenvolupat i ens ajuda a repetir unes instruccions un número definit o indefinit (condició) de vegades.
Normalment seguiran la lògica de:
- Esquema de recorregut: Executar unes instruccions per tots els elements a tractar. Exemple: Comptar persones.
- Esquema de recerca: Executar unes instruccions cercant algun element a dins dels candicats. Caldrà definir una condició de trobat i de final. Per exemple: cercar a una persona.
Obtenir 1r element
Mentre (No final)
Processar
Obtenir següent element
FMentre
Obtenir 1r element
Mentre (No trobat) I (No final)
Processar
Obtenir següent element
FMentre
Si Trobat Llavors
accions trobat
Sino
accions No trobat
FSi
NOTA
Cal definir bé les condicions de final per no generar un bucle infinit. Cal definir com obtenir següent element.
De la nostra manera de pensar, podriem tenir un destí a arribar
Posició actual
Mentre (No hem arribat al destí)
Fem una passa
FMentre
//Quan sortim del bucle, significa que hem arribat al final.
Podem tenir condicions més complexes a avaluar. O fins i tot més d'una acció a realitzar.
Posició actual
Mentre (No hem arribat al destí O estem cansats)
Fem una passa
SI (el destí és cap a la dreta)
Girem a la dreta
SINO SI(el destí és cap a l'esquerra)
Girem a l'esquerra
FSI
FMentre
//Quan sortim del bucle, significa que hem arribat al final o bé estem cansats.
Tenim 4 tipus de bucles:
while
: Repeteix instruccions mentre la condició sigui certa.
do while
: Repeteix instruccions fins que una condició deixa de ser certa
for
: Repeteix instruccions un número específic de vegades
for each
: repeteix instruccions per cada un dels elements d'un array.
Funcions¶
Una funció s'usa per estructurar el codi de manera descendent i poder usar i repetir la seva lògica tantes vegades com sigui necessari.
Una funció no s'executa quan s'interpreta l'script php, cal fer una crida a la mateixa.
El nom de la funció ha de començar amb una lletra o bé _.
Els noms de les funcions:
- Són case-sensitive al declarar-les.
- Donarà errada per duplicitat sense diferenciar majúscules de minúscules.
- Són case-insensitive al cridar-les.
- No donarà errada al diferenciar majúscules de minúscules al cridar-les.
Warning
donaria errada de declaració per duplicitat de l'identificador!
Warning
Faria la crida a la funció Exemple()
dues vegades corectament !
Poden o no retornar un valor.
Un petit exemple, de com definir i cridar a una funció sense paràmetres ni que retorni res.
Els paràmetres o arguments ens permeten passar valor a dins de la funció i tindran un àmbit local de la mateixa.exemple7.php | |
---|---|
Versió 7
A partir de la versió 7 del php, podem tipar els paràmetres
Podem passar arguments per:
- valor. Permet passar valors o agafar els valors dels arguments passats.
- referència: usem & al davant de l'argument i farà referència a la posició de memòria
exemple8.php | |
---|---|
Valors per defecte.
exemple9.php | |
---|---|
Podem indicar un valor per defecte si no passem aquest argument. Ha d'estar a la dreta dels argument, com a últim passat.
Versió 8
A partir de la versió 8 de php podem usar els paràmetres anomenats (named arguments)
paràmetres anomenats | |
---|---|
POO Mètodes
Més endavant veurem com la lògica de les funcions serà usada en la implementació dels mètodes d'una classe.
Recursivitat
PHP permet recursivitat en la crida de funcions i es pot cridar a si mateixa.
Includes¶
Els arxius include ens donen la oportunitat d'escriure funcions generals de la nostra aplicació i poder-la incloure en les diferents pàgines .php que desenvolupem.
Ens ajudarà a desenvolupar codi més estructurat.
Tenim diverses opcions:
- include: inclou l'arxiu. Si no el troba, no l'inclou i continua.
- require: inclou l'arxiu. Si no el troba, ara s'atura i dona errada.
- include_once: inclou l'arxiu, només la 1a vegada. Si no el troba, no l'inclou i continua
- require_once: inclou l'arxiu, només la 1a vegada. Si no el troba, ara s'atura i dona errada.
Info
Podem veure com ho fem.
Taules¶
Una taula és una estructura de dades que permet desar informació composta. Pot contenir informació indexada amb diferents valors de diferents tipus.
per definir un array
fem
Si volem guardar-hi valors els separem entre comes al moment d'assignar.
Ara la taula té 3 valors de tipus string.
De manera bàsica accedim a la informació amb índexs de posicions.
Ens mostrarà el valor de "Judit"
Tenim 3 tipus d'arrays:
- indexats: Assignem valors i accedim al valor per posició
- Associatius: Assignem parella de clau / valor i accedim per clau al valor
- Multidimensional: Tenim diversos nivells de guardar valors, de forma indexada o associativa
Per guardar un valor associat a una clau fem:
Per accedir al nom fariem:
exemple10.php exemple10.phpEns mostrarà el valor de "Soler"
Podem fer arrays multidimensionals per guardar, per exemple, valors de varis alumnes d'un grups:
Per accedir al nom del 2n alumne:
Ens mostrarà el valor de "Laia"
Podem fer arrays multidimensionals associatius
Ara per saber el nom del fill fariem:
Ens mostrarà el nom de "Marc"
nota
Per recorrer tots els valors d'un array podem usar for
o foreach
Hi ha un llista de funcions de php
disponibles per a realitzar diverses accions:
- afegir valors
- ordenar valors
- eliminar valors
- fusionar valors
- ...
Superglobals¶
Són variables internes al llenguatge i ens donen informació interessant per desenvolupar, per exemple quina és la IP que ens fa la petició a la pàgina
- $GLOBALS: ens dona accés a totes les variables d'àmbit global de la pàgina.
- $_SERVER: ens dona accés a informació de l'entorn del servidor
- $_REQUEST: ens dona informació de la petició de la pàgina .php (POST i GET)
- $_POST: ens dona informació de les dades enviades per POST
- $_GET: ens dona informació de les dades enviades per GET
- $_FILES: ens dona informació dels fitxers pujats en la petició de la pàgina.
- $_ENV: ens dona informació sobre l'entorn del servidor.
- $_COOKIE: ens dona informació de les cookies enviades cap al servidor.
- $_SESSION: ens permet accedir a variables de sessió de navegació d'una aplicació web.
Totes aquestes variables són arrays associatius, per exemple:
Formularis¶
Els Formularis ens serveixen per a poder inserir i/o gestionar dades de l'aplicació web amb l'usuari.
Els formularis estan basat en etiquetes HTML que ens serveixen per a formatar les dades per inserir o gestionar.
La idea d'un formulari és que ens permet enviar dades cap a la banda del servidor i les podem processar per:
- Desar dades a una BdD
- Realitzar uns càlculs
- Usar les dades per cridar a un WebServices
Ens interessa:
FORM
: Etiqueta d'inici/Fi de Formulari HTMLaction
: atribut que ens indica quina pàgina .php cridarà a l'enviar el formularimethod
: atribut de valor GET o POST, indicant si s'envien les dades per URL o per capçalera HTTP.name
: atribut que ens servirà per identificar el valor al PHP del servidor.submit
: Botó per enviar el formulari.
Una vegada hem rebut la petició de la pàgina .php al servidor, les dades es carreguen de manera automàtica a l'array:
$_GET
: si teniem atribut method="GET"$_POST
: si teniem atribut method="POST"
En l'exemple anterior les dades serien:
"nom" => Nom_entrat
"edat" => edat_entrada
Fariem:
Un exemple podira ser:
Sempre serà una bona pràctica assegurar-nos que tenim els valors a dins d'array.
Pel que fa a la validació dels valors, ho farem sempre per optimitzar a la banda del client:
- javascript: funció de validació dels camps. Caldrà crear l'atribut
id
- HTML5: diferents valors dels
INPUT
types
A la banda del servidor farem les validacions necessàries en fase de precondicions
Funcions php¶
Les funcions php són funcions ja predefinides pel propi llenguatge PHP i les podem usar directament sense have d'incloure cap arxiu.
Ens permetrà resoldre multitud de diverses lògiques sobre les dades del codi, per exemple:
- sobre números: abs(), asin(), floor(), max(), min(), ...
- sobre strings: chr(), str_reverse(), trim(), ...
- sobre dates: date_diff(), date_add(), date_create(), ...
- ...
Excepcions¶
Les excepcions són una manera de tractar una errada en l'execució de codi.
Normalment estarà associat a l'errada d'accés a un recurs, una bdd o bé d'alguna errada d'execució d'una instrucció, per exemple, una divisió per 0.
Podem llançar o crear una excepció throw
:
Per controlar aquestes errades tenim el try...catch
que ens permetrà controlar aquest fet.
Per exemple:
D'aquesta manera el nostre codi quedarà protegit i no donarà una errada d'execució del php, interrumpent l'script php.
L'objecte Exception $e
ens permetrà accedir per exemple a la descripció de l'errada.
Bones pràctiques!
Per tant usarem sempre try...catch
sempre que ens calgui executar controladament un codi amb possibilitat d'errada.
Sessions¶
Les variables de sessió és la manera que hi ha per mantenir de valors entre diferents pàgines php.
La navegació per una aplicació web des de un navegador client, fa que s'executi una pàgina .php diferent a cada petició HTTP GET, això provoca que el domini de les variables s'acabi en l'execució del codi de la pàgina .php.
Potser molt útil, per exemple, en casos de voler desar informació d'usuari 'logat' en una intranet.
S'usa la variable superglobal $_SESSION
, que conté un array associatiu de valors, on la clau és l'identificador.
Per exemple:
pàgina1.php | |
---|---|
pàgina2.php | |
---|---|
D'aquesta manera podem veure com podem recuperar el nom de l'usuari en una pàgina diferent de la que s'ha assignat el valor.
Fixeu-vos que s'escriu session_start();
, això servei per iniciar el treball amb sessions. No significa que s'inicia una sessió. Una sessió s'inicia en la 1a petició HTTP GET que fa un navegador client a un servidor web i es manté constant mentre navega per diferents pàgines.
Per saber com s'identifica la sessió de navegació, el servidor web usa una cookie que envia i consulta al navegador del client.
Podem consultar tots els valors desats a la variable $_SESSION:
La sessió vé identificada per un ID
Per borrar totes les variables i destruir la sessió:
La sessió es destruirà automàticament quan el servidor web detecti que la navegació s'ha acabat del tot i la cookie no tingui validesa. Això sol passar normalment quan es tanca el navegador completament. Ull amb les pestanyes del navegador que mantenen la mateixa sessió oberta normalment.
Cookies¶
Les cookies són valors que es desen al navegador del client i serveixen per identificar la seva navegació cap a l'aplicació web del servidor.
En aquest aspecte el client pot configurar el navegador per que no accepti cookies. I també la LOPD afecta en el seu ús, que cal ser acceptat per part de l'usuari que navega.
Aquest valor que es desa al navegador del client, s'envia automàticament cap al servidor cada vegada que el client navega a una pàgina, a través del protocol HTTP. I el servidor per codi php pot enviar cookies que es desaran al navegador del client.
Una cookie té els següents paràmetres:
- nom de la cookie
- valor de la cookie
- data en que expira i desapareix del nevegador
- ruta a dins de la web a on s'aplica
- domini a on s'aplica
- indicar si s'envia només sota https
- només per ús de protocol http, no permet ser usada des de javascript al navegador
Serà accesible per la variable àrray associatiu superglobal $_COOKIE
a dins del php que permet recollir els valors de les cookies enviades des de el navegador del client.
Per exemple:
de manera segura podriem fer:
setcookie()
.
O indiquem que expira al cap de 1 any
Des de el navegador client sempre podem anar a observar les cookies associades a un domini que tenim i les podem eliminar.
Nota
Les cookies són una eina complementaria a les variables de sessió i que conjuntament ens poden servir per donar seguretat a l'aplicació web.
Cal tenir present que una variable de sessió sempre la podrem assignar i recuperar el valor a la mateixa pàgina php, mentre que una cookie, sempre haurem de crear-la i enviar-la al client i posteriorment recuperar en una segona crida a la pàgina php.