Beruflich Dokumente
Kultur Dokumente
Introduction
Objectifs de la formation
Participer
Faire les exercices, mmes triviaux
Innover ! Les TPs vous permettent de comprendre les
concepts, faites-les votre manire
#3
Plan de formation
Plan de formation
#5
Rappel MySQL
Rappel MySQL
#7
Rappel MySQL
#8
Rappel MySQL
L'extension mysqli
Permet de profiter des fonctionnalits de MySQL
4.1 et +
A partir de PHP 4.1.3
PHP doit tre compil avec le support de
l'extension mysqli (linux)
L'extension mysqli doit tre active dans php.ini
(windows)
#9
Rappel MySQL
Se connecter
La fonction mysqli_connect(), possde 4
arguments principaux :
l'adresse du serveur
le nom d'utilisateur
le mot de passe pour l'authentification
la base de donnes utiliser
# 10
Rappel MySQL
Se connecter
Connexion au serveur MySQL
<?php
$link=mysqli_connect('sql.zend.fr','monlogin','secret',
'mabase');
# 11
Rappel MySQL
# 12
Rappel MySQL
# 13
Rappel MySQL
# 14
Rappel MySQL
# 15
Rappel MySQL
Rcuprer le rsultat
3 fonctions pour rcuprer le rsultat d'une
requte :
# 16
Rappel MySQL
Rcuprer le rsultat
Exploiter le rsultat d'une requte SELECT
<?php
include_once'configuration.php';
$sql="SELECTnom,prenomFROMclientWHEREville='Paris'";
$resultat=mysqli_query($link,$sql);
$enregistrement=mysqli_fetch_assoc($resultat);
while($enregistrement){
//Affichelechampprenom
echo$enregistrement['prenom'],'';
//Affichelechampnom
echo$enregistrement['nom'],'<br>';
}
# 17
Rappel MySQL
connexion
Elle prend en argument l'identifiant de connexion
# 18
Rappel MySQL
# 19
Rappel MySQL
Vous pouvez aussi utiliser d'autres outils (Mysql Query Browser, SQL
Front, ...).
# 20
Rappel MySQL
Rappel MySQL
La PHPDOC
La PHPDOC
Introduction
La phpdoc est un standard d'criture pour la
# 24
La PHPDOC
Importance de la documentation
La documentation permet de rendre
comprhensible un code source.
La phpdoc est un standard !
# 25
La PHPDOC
Structure de la PHPDOC
La PHPDOC est reconnaissable sa structure
/**
*JesuisuncommentairePHPDOC!
*/
# 26
La PHPDOC
# 27
La PHPDOC
@author
@copyright
# 28
La PHPDOC
@example
@ignore
# 29
La PHPDOC
@link
@see
# 30
La PHPDOC
@tutorial
@version
Version de l'lment.
# 31
La PHPDOC
# 32
La PHPDOC
# 33
La PHPDOC
Les index
CREATE TABLE...
CREATE [UNIQUE|FULLTEXT] INDEX nom_index ON
nom_table (colonne__indexer,...)
ALTER TABLE nom_table ADD {INDEX|KEY|UNIQUE|
PRIMARY KEY} [nom_index] (colonne__indexer,...)
# 36
Les index
Crer un index
/*Ajoutd'unindexuniquesurlechampine*/
CREATEuniqueINDEXidx_ineONetudiant(ine);
/*Ajoutd'unindexfulltextsurlechampcv*/
CREATEfulltextINDEXidx_ft_cvONetudiant(cv);
/*Ajoutd'uneclprimairesurlechampid_etudiant*/
ALTERTABLEetudiantADDprimarykey(id_etudiant);
/*Ajoutd'unindexsurlecoupledechampsnom,prenom*/
ALTERTABLEidx_nom_prenomADDkey(nom,prenom);
# 37
UNIQUE
# 38
FULLTEXT
# 39
# 40
# 41
# 42
Vous pouvez aussi utiliser d'autres outils (Mysql Query Browser, SQL
Front, ...).
# 43
nom
prix
nom
Introduction
# 46
# 47
Exemple de classe
# 48
# 49
# 50
# 51
Le 'moule' de la classe
Les proprits
Les mthodes
# 52
//Uneproprit(variabledeclasse)
var$name;
//Unemthode(fonctiondeclasse)
functiongetName()
{
returnucfirst($this>name);
}
# 53
# 54
$longueur
$largeur
Le constructeur
Comment marche un constructeur ?
A quoi a sert ?
Le destructeur
Comment marche un destructeur ?
La fin de vie d'un objet peut subvenir la fin du script, lorsque l'on
supprime la variable qui contient l'objet (unset) ou lorsque l'on
remplace son contenu (affectation).
# 57
Constructeur (1/2)
Crez un fichier 04_Rectangle_constructeur.php
Dans ce fichier, crez une classe 'Rectangle' (R
Constructeur (2/2)
Crez deux objets de type 'Rectangle' partir de
cette classe
# 60
La visibilit
Application
Priv (private)
Protg (protected)
Publique (public)
# 61
Visibilit (1/2)
Crez un fichier 05_Rectangle_visibilite.php
Dans ce fichier, crez une classe 'Rectangle' (avec un
Visibilit (2/2)
Crez un constructeur qui prend deux paramtres
# 64
L'hritage
# 65
L'hritage (UML)
# 66
Hritage (1/2)
Exemple d'hritage
<?php
classUser//UneclasseUtilisateur
{
private$name;
publicfunctionsetName($name)
{
$this>name=$name;
}
publicfunctiongetName()
{
returnucfirst($this>name);
}
}
# 67
Hritage (2/2)
Exemple d'hritage
//Uneclasse'Administrator'quihritede'User'
classAdministratorextendsUser
{
private$level='administrator';
}
//AdministratorhritedeUserdonconpeut
//s'enservircommed'unUser
$admin=newAdministrator();
$admin>setName('jean');
echo$admin>getName();
# 68
Hritage (1/3)
Crez un fichier 06_heritage_Rectangle.php
Dans ce fichier :
Hritage (2/3)
Crez un fichier 06_heritage_test.php
Evitez de crer les objets dans le mme fichier que la classe. Cela
surcharge le fichier et impose l'instanciation d'un objet qui n'est pas
forcment utile.
# 70
Hritage (3/3)
Crez un fichier 06_heritage_Carre.php
Dans ce fichier :
La srialisation
Principe
Utilit
Srialisation
# 73
Srialisation (affichage)
Rsultat du script prcdent
O:4:"User":1:{s:4:"name";s:4:"Seth";}
UserObject
(
[name]=>Seth
)
# 74
PDO
PDO
Introduction
PDO est une interface d'accs aux bases de
donnes.
PDO n'est pas un systme d'abstraction complet
# 76
PDO
Architecture / principe
PDO fonctionne avec un ensemble d'extensions
# 77
PDO
Architecture / principe
# 78
PDO
Connexions
Lancement des requtes
rsultats.
La classe PDOException est une classe
d'exception personnalise interne pour PDO.
# 79
PDO
# 80
PDO
Bases de PDO
Crez un fichier 07_pdo_connexion.php
Dans ce fichier
PDO
Requtes prpares
Les requtes prpares sont un modle de
# 82
PDO
Requtes prpares
Exemple de requte prpare avec PDO
//Ondclarelarequteaveclamthodeprepare
$stmt=$dbh>prepare('insertintotttvalues(:name)');
//Puisonlielesparamtresdesvariables
$stmt>bindParam(':name',$func);
//Enfin,onappellelamthodeexecute
$funcs=get_extension_funcs('xml');
foreach($funcsas$func){
$stmt>execute();
}
# 83
PDO
# 84
PDO
PDO
POO Avance
POO Avance
POO avance
Les types d'objets en UML
Les interfaces
Les classes abstraites
Les mthodes et constantes magiques
Les motifs de conception (design patterns)
# 88
POO Avance
Types d'objets
En UML, on peut diffrencier trois manires
diffrentes d'utiliser un objet :
# 89
POO Avance
Une entite
# 90
POO Avance
Un contrle
# 91
POO Avance
Un dialogue
# 92
POO Avance
POO Avance
# 94
POO Avance
# 95
POO Avance
# 96
POO Avance
publicfunctiongetVolume()
{
//...
}
# 97
POO Avance
Interfaces
Crez un fichier 09_interfaces.php
Reprenez les interfaces et les classes de l'exemple
prcdent
Remplissez les blancs pour que les objets renvoient les
aires et volumes voulus
A la fin du fichier, crez un objet $rectangle et un
objet $carre, affichez leur aires et le volume du cube
POO Avance
# 99
POO Avance
# 100
POO Avance
# 101
POO Avance
Constantes magiques
Utilisation frquente de __FILE__
<?php
//TrouverlecheminverslefichierPHPcourant
$path=dirname(__FILE__);
//Pourviterd'appellerdirnamechaquefois,
//vouspouvezcrerunefonctionouunemthode
functiongetPath()
{
static$path=null;
if($path===null){
$path=dirname(__FILE__);
}
return$path;
}
# 102
POO Avance
# 103
POO Avance
La fabrique
Le proxy
La faade
# 104
POO Avance
# 105
POO Avance
Construire un singleton
Crez un fichier 10_singleton.php
Transformation en singleton
POO Avance
Introduction MVC
MVC est trs utilis dans les applications web
Il est dcompos en 3 parties
# 107
POO Avance
Principe de MVC
# 108
POO Avance
MVC et formulaires
La vue
Le contrleur
Le modle
POO Avance
# 110
# 112
Utilit
# 113
Illustration
traitements
En rouge : lors des traitements,
une erreur BD est apparue ?
On la traite.
En vert : lors des traitements,
une erreur inconnue est
apparue ? On la traite.
# 114
# 115
# 116
# 117
Exceptions personnalises
Une exception personnalise permet d'avoir la
main sur le traitement des erreurs ou des
vnements traits par les exceptions.
La premire tape consiste crer une classe
d'exception personnalise.
Dans un deuxime temps, on peut sparer la
gestion des exceptions dans des blocs "catch"
diffrents.
# 120
Implmentation
# 121
# 122
Moteur transactionnel
Prsentation
# 126
Moteur transactionnel
Cl trangre
Permet de dclarer des relations entre les
# 127
Moteur transactionnel
Intgrit rfrentielle
Lors d'un DELETE ou d'un UPDATE dans la table
# 128
Moteur transactionnel
Intgrit rfrentielle
Syntaxes:
# 129
Moteur transactionnel
# 130
Moteur transactionnel
Cl trangre
Relation entre deux tables
CREATETABLEvendeur(
id_vendeurint(10)unsignedNOTNULLauto_increment,
nomvarchar(45)NOTNULLdefault'',
PRIMARYKEY(id_vendeur)
)ENGINE=InnoDB;
Latableclientestlievendeurparlechampid_vendeur:
CREATETABLEclient(
id_clientint(10)unsignedNOTNULLauto_increment,
nomvarchar(45)NOTNULLdefault'',
id_vendeurint(10)unsigneddefaultNULL,
PRIMARYKEY(id_client),
KEYFK_id_vendeur(id_vendeur),
CONSTRAINTFK_id_vendeurFOREIGNKEY(id_vendeur)
REFERENCESvendeur(id_vendeur)
ONDELETECASCADEONUPDATECASCADE
)ENGINE=InnoDB;
# 131
Moteur transactionnel
Cl trangre (1/3)
Si ce n'est pas dj fait, l'aide de phpMyAdmin
Moteur transactionnel
Cl trangre (2/3)
A l'aide de phpMyAdmin crez une base 'categories'
Dans la base 'magasin', crez une table 'categories'
avec 2 champs :
Moteur transactionnel
Cl trangre (3/3)
Dans la table 'produits', ajoutez un champ
Moteur transactionnel
Les transactions
Groupe de requtes SQL rassembles en une
opration atomique
InnoDB supporte la norme ACID
# 135
Moteur transactionnel
Les transactions
Une transaction dbute avec START TRANSACTION
ou BEGIN
Elle se termine par :
# 136
Moteur transactionnel
Transaction
Transaction valide
/*Dbutdelatransaction*/
STARTTRANSACTION;
/*suitedereqtes*/
UPDATEproduitSETqte=qte1WHEREid_produit=4126;
INSERTINTOlog(date,id)VALUES(now(),4126);
/*Validation:Findelatransaction*/
COMMIT;
# 137
Moteur transactionnel
Transaction
# 138
Flux XML
Flux XML
# 140
Flux XML
# 141
Flux XML
L'extension DOMXML
# 142
Flux XML
L'extension SimpleXML
SimpleXML est une extension de manipulation de
# 143
Flux XML
Simplicit d'utilisation
Permet toutes les oprations (lecture, criture,
suppression, cration, enregistrement).
Gre XPath et permet le passage DOM en une seule
instruction.
Inconvnients
# 144
Flux XML
Exemple de lecture
# 145
Flux XML
Exemple de modification
# 146
Flux XML
# 147
Flux XML
# 148
Flux XML
L'extension DOMXML
DOMXML est une extension stable et efficace qui
permet de grer la lecture, l'criture, la
suppression, l'enregistrement.
Cette extension est disponible dans PHP 4 et PHP
5. En revanche, elle a t stabilise dans PHP 5.
Gre les requtes XPath et les transformations
XSLT.
Son utilisation est verbeuse et pas toujours trs
intuitive au dbut.
# 149
Flux XML
DOMXML : lecture
# 150
Flux XML
DOMXML : criture
# 151
Flux XML
L'extension SAX
L'extension SAX permet la lecture partielle ou
# 152
Flux XML
SAX : lecture
Transformation d'un flux XML en tableau
$parser=xml_parser_create('utf8');
xml_parse_into_struct($parser,$xml,$table);
unset($parser);
$level=0;
foreach($tableas$v){
$v['value']=utf8_decode($v['value']);
if($v['type']=='open')
echostr_repeat('',$level++).'['.$v['tag']."]\n";
if($v['type']=='close')
echostr_repeat('',$level).'[/'.$v['tag']."]\n";
if($v['type']=='complete'){
echostr_repeat('',$level+1).'['.$v['tag'];
echo']'.$v['value'].'[/'.$v['tag']."]\n";
}
}
# 153
Flux XML
# 154
Flux XML
# 155
Flux XML
Flux XML
Flux XML
Optimisation
# 160
# 161
# 162
Optimisation de l'index
Un index sur la colonne entire n'est pas toujours
ncessaire
Indexer le prfixe de la colonne: gain de place et
de performance
# 164
# 165
Influencer l'optimiseur
Forcer MySQL utiliser ou ignorer les index (si
possible)
SELECT ... FROM table_name [[USE|FORCE|
IGNORE] INDEX(nom_colonne_indexe)]
SELECT STRAIGHT_JOIN
# 166
Influencer l'optimiseur
SELECT SQL_BUFFER_RESULT
SELECT SQL_BIG_RESULT
# 167
# 168
Quelques conseils
# 169
Quelques conseils
Utiliser auto_increment
# 170
Optimisation du schma
Choisir les bons types de champs (PROCEDURE
ANALYSE())
Choisir la bonne longueur de champs
Attention particulire aux cls trangres
Normalisez votre base de donnes (3me forme
normale)
Choisir les moteurs de stockages adapts
# 171
PROCEDURE ANALYSE()
Procdure d'analyse de la structure de la table
Propose le type optimale de chaque champ
analys dans le SELECT
nom
valeur minimale
valeur maximlale
taille maximlale
nombre de valeur vides ou gales zro
nombre de valeur NULL
valeur ou taille moyenne
cart type
type optimal suggr pour le champ analys
# 172
# 173
# 174
Normalisation
afin d'viter
# 175
Moteur de stockage
Pluggable storage engine architecture
Plusieurs moteurs de stockage peuvent tre utiliss
sur le mme serveur
Le moteur de stockage est dfini au niveau des
tables
Possibilit de changer de moteur
# 176
Moteur de stockage
Caractristiques indpendentes du moteur de
stockage
# 177
de vitesse
de transactions
frquence des critures
volume de donnes a stocker
# 178
MyISAM
lecture
Prend en charge les index FULLTEXT
Prend en charge les types de donnes spatiales
(GIS)
Adapt pour le reporting ou le data warehouse
Cadre d'utilisation:
lectures frquentes
mises jour avec des index
# 179
InnoDB
besoin transactionnel
besoin intgrit rfrentielle
tables avec un frquence leve de commandes
UPDATE et DELETE
# 180
MEMORY
tables temporaires
# 181
ARCHIVE
la clause ORDER BY
les colonnes BLOB
Cadre d'utilisation:
# 182
Services Web
Services Web
d'introprabilit.
Ils permettent l'change d'informations et l'accs
des services dynamiques entre plusieurs
systmes htrognes.
Ils dfinissent un protocole commun et standard
pour cela.
# 184
Services Web
REST
# 185
Services Web
Principe de REST
L'interrogation d'un service REST se fait via l'URL
(requte GET).
Le format du retour d'information peut prendre
plusieurs formes possibles :
Un flux XML
Une chane srialise
# 186
Services Web
# 187
Services Web
# 188
Services Web
Services Web
Services Web
# 191
Services Web
XMLRPC
XMLRPC est un protocole d'change encore
utilis.
Il permet l'change de donnes et la
manipulation de fonctions distance.
Ces services sont souvent remplacs par les
standards SOAP / WSDL
# 192
Services Web
WSDL
# 193
Services Web
SOAP et PHP
PHP permet de crer un serveur SOAP
PHP permet de crer un client SOAP
PHP ne permet pas (encore) de gnrer un
document WSDL.
L'extension SOAP pour PHP 5 est native, stable et
efficace.
# 194
Services Web
# 195
Services Web
Avec UML2PHP5
http://uml2php5.zpmag.com/SOAP_server.php
# 196
Services Web
# 197
Services Web
Avec PHP5, utilisez l'extension native SOAP qui est de loin la plus
efficace.
# 198
Services Web
Services Web
'authentificate'.
Cette fonction 'authentificate' prend en paramtre un
login et un mot de passe.
Services Web
# 201
Introduction la SPL
Introduction la SPL
http://www.php.net/~helly/php/ext/spl/
http://www.php.net/spl
# 203
Introduction la SPL
Concepts / utilit
Les classes de la SPL permettent d'attribuer des
# 204
Introduction la SPL
http://www.php.net/~helly/php/ext/spl/hierarchy.html
ArrayAccess
Coutable
Exception
SplFileInfo, SplObserver, SplSubject
Traversable
# 205
Introduction la SPL
# 206
Introduction la SPL
# 207
Introduction la SPL
Parcours de rpertoire
Sans itrateur...
if($handle=opendir(".")){
while(false!==($file=readdir($handle))){
if($file!="."&&$file!=".."){
print"$file<br/>\n";
}
}
closedir($handle);
}
# 208
Introduction la SPL
Parcours de rpertoire
Avec itrateur...
$dir=newDirectoryIterator(".");
while($dir>valid()){
if(!$dir>isDot()){
print$dir>current()."<br/>\n";
}
$dir>next();
}
# 209
Introduction la SPL
# 210
Introduction la SPL
Implmenter un itrateur
Vos propres classes peuvent implmenter un
# 211
Introduction la SPL
Itrateur : principe
Un intrateur possde des mthodes spciales
permettant son parcours :
# 212
Introduction la SPL
Introduction la SPL
PHP Avanc
# 216
PHP Avanc
Notes
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
Utilisez ce slide pour prendre des notes (1/3)
# 217
PHP Avanc
Notes
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
Utilisez ce slide pour prendre des notes (2/3)
# 218
PHP Avanc
Notes
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
Utilisez ce slide pour prendre des notes (3/3)
# 219