Les fonctions
q Les fonctions et les procédures regroupent un ensemble d'instructions
réutilisables et qui accomplissent un ensemble d'opérations.
q Ce bloc de code n’est pas exécuté de manière linéaire dans un script .
Il ne le sera que lors de l’appel explicite de la fonction.
q Écrit une seule fois, ce code peut être exécuté aussi souvent que
nécessaire à Cela allège d’autant l’ensemble du code.
q PHP propose en standard une multitude de fonctions natives écrites
en langage C, ainsi qu’une quantité de modules d’extension qu’il est
possible d’associer à la distribution standard.
1
Les fonctions
Fonctions ou procédure ?
q Une fonction réalise une succession d'instructions et renvoie
une valeur issue d'un calcul (instruction return).
q Une procédure réalise une succession d'instructions mais ne
renvoie pas de valeur en retour.
N.B: Il n'y a pas de distinction fonctions / procédures en PHP.
Les fonctions PHP prennent de 0 à n paramètres. Ces
paramètres peuvent être de type quelconque.
2
Les fonctions
Déclaration
q La syntaxe de déclaration s’appuie sur le mot clé function.
q La valeur de retour peut-être de tout type
function mafonction($x,$y,...) {
//code de définition de la fonction
return $var;
}
q Une fonction peut être définie n’importe où dans un
script, y compris après avoir été utilisée. Il existe
cependant des exceptions. 3
Les fonctions
Exemple d'une fonction :
4
Les fonctions
Exemple d'une procédure :
Function affichage_prix($s_nom_article, $d_prix) {
echo "<b>$s_nom_article: </b>"; //nom article en gras
//prix en DH en rouge
echo "<font color=red>$d_prix DH</font><BR>";
//prix en euros en vert
echo "<font color=green>".$d_prix/11.50."€</font>");
echo "<HR>"; //ligne horizontale
5
}
Les fonctions
q Pour appeler la fonction, vous écrivez : mafonction($a,$b,...)
q Pour appeler les 2 exemples précédents, on écrira :
Ø $surf_cercle = calcul_surface_cercle(5);
// $ surf_cercle = 78.5
Ø affichage_prix("HP", "7000");
Affiche :
HP 7000 DH
608.695652 € 6
Les fonctions
Transmission des paramètres
q Le passage des paramètres par valeur (par copie) est le type
de transmission par défaut, c'est à dire que la fonction
possède une copie locale de la variable envoyée.
q La variable conserve sa valeur initiale après l'appel de la
fonction même si celle-ci l'a modifiée.
7
Les fonctions
Transmission des paramètres
q Exemple : function double ($n){
$n=$n*2;
return $n;
}
q Si on passe l'argument "par valeur" à cette fonction double(),
on obtient :
$a=5; // valeur initiale
// On va en calculer le double
echo "double=" . double ($a) . " valeur= " . $a ; // double=10
valeur=5 8
Les fonctions
Transmission des paramètres
q Avec la méthode du passage des paramètres par référence
(par adresse), on passe à la fonction l’adresse mémoire
d’une variable existante.
q Cela se fait en précédant de & le nom du paramètre.
q Cela permet de modifier ce paramètre dans la fonction.
9
Les fonctions
Transmission des paramètres
q Exemple : function double (&$n){
$n=$n*2;
return $n;
}
q Si on passe l'argument "par valeur" à cette fonction double(),
on obtient :
$a=5; // valeur initiale
// On va en calculer le double
echo "double=" . double ($a) . " valeur= " . $a ; // double=10
valeur=10 10
Les fonctions
Transmission des paramètres
q Les paramètres optionnels sont autorisés : il suffit de leur
affecter une valeur par défaut.
function mafonction( $param1 = "inconnu", $param2= NULL) {
echo "param1=$param1 param2=$param2\n";}
Appels:
mafonction( "toto", "titi" ); // => "param1=toto param2=titi"
mafonction( "toto" ); // => "param1=toto param2=NULL
mafonction(); // => "param1=inconnu param2= NULL 11
Les fonctions
Portés des variables
q Par défaut, une variable déclarée dans une fonction PHP est locale
à cette fonction.
q Elle n'est donc pas reconnue à l'extérieur de celle ci.
q De même, une variable déclarée en dehors de la fonction n'est pas
par défaut accessible depuis l'intérieur.
12
Les fonctions
Portés des variables
<?php
$a="salut";
Function affichage() {
$b="tout le monde";
echo $a;
}
affichage();
echo "$b";
?>
13
Les fonctions
Portés des variables
q Le mot clé global permet de modifier la portée des variables
locales à une fonction. Le tableau associatif $GLOBALS permet
d’accéder aux variables globales du script ($GLOBALS["var"]
accède à la variable $var).
14
Les fonctions
Portés des variables
Affichage
15
Exercice
Ecrire en PHP un script permettant de permuter les valeurs de deux
variables.
Exemple d’exécution:
Avant permutation: x = 1, y = 2
Apres permutation: x = 2, y = 1
16
Les fonctions
Fonctions mathématiques
abs($x): retourne la valeur absolue de $x.
pow($x,$y): retourne $x à la puissance $y.
max($a,$b,$c,...): retourne le nombre le plus grand parmi $a, $b, $c...
min($a,$b,$c,...): retourne le nombre le plus petit parmi $a, $b, $c...
sqrt($x): retourne la racine carré de $x.
log($x): retourne le logarithme naturel (népérien) de $x.
log10($x): retourne le logarithme en base 10 de $x.
exp($x): retourne l'exponentiel de $x. 17
Les fonctions
Fonctions mathématiques
pi(): retourne la valeur approximative de PI (3,14159265359).
sin($x): retourne le sinus de $x.
cos($x): retourne le cosinus de $x.
tan($x): retourne la tangente de $x.
hexdec($x): converti $x de la base hexadécimale à la base décimale.
dechex($x): converti $x de la base décimale à la base hexadécimale.
bindec($x): converti $x de la base binaire à la base décimale.
decbin($x): converti $x de la base décimale à la base binaire. 18
Les fonctions
Fonction date
q date(): permet d’afficher, le jour, la date et l’heure sur les pages WEB
Caractère Description Exemple
d Jour du mois, sur deux chiffres (avec un zéro initial) 01 à 31
g Heure, au format 12h, sans les zéros initiaux 1 à 12
G Heure, au format 24h, sans les zéros initiaux 0 à 23
h Heure, au format 12h, avec les zéros initiaux 01 à 12
H Heure, au format 24h, avec les zéros initiaux 00 à 23
i Minute avec les zéros initiaux 00 a 59
j Jour du mois sans les zéros initiaux 1 à 31
m Mois au format numérique, avec zéros initiaux 01 à 12
19
Les fonctions
Fonction date
Caractère Description Exemple
M Mois, en trois lettres, en anglais Jan à Dec
n Mois sans les zéros initiaux 1 à 12
s Seconde avec zéros initiaux 00 à 59
W Numéro de la semaine dans l’année 42
Y Année à quatre chiffres 2004
y Année à deux chiffres 04
Z Jour de l’année 312
Exemple: <?php
$format = 'd-m-y, H:i:s' ;
$date = date($format) ;
echo $date ;// Affiche une date sous la forme : 31-04-04, 23:59:59
20
?>
Inclusions et arrêts prématurés
Les inclusions
q La programmation modulaire permet de la réutilisation de code,
notamment par l'écriture de librairies.
q De ce fait, PHP permet cette modularité par la programmation de
librairies classiques et de classes.
q Les librairies sont des fichiers PHP traditionnels. Leur extension
était .inc par convention, mais de plus en plus l’extension .PHP est
utilisée.
21
Inclusions et arrêts prématurés
Les inclusions
q On inclus un fichier en utilisant les deux instructions include ou
require.
q Il existe une différence importante entre les deux :
ü Un fichier inclus par include est inclus dynamiquement, lors de
l'exécution du code, c’est-à-dire qu’il est lu puis interprété.
ü Un fichier inclus par require est inclus avant l'interprétation du
code. Il est équivalent à la directive #include du langage C.
22
Inclusions et arrêts prématurés
Les inclusions
Exemple:
if( $user == "Administrateur" ) { Avec include, le résultat est
celui escompté, tandis
include "admin_fonctions.php"; qu'avec require, le fichier
admin_fonctions.php est
}
inclus quelque soit le
if( $user == "Administrateur" ) { résultat du test if.
require "admin_fonctions.php";
}
23
Inclusions et arrêts prématurés
Les inclusions
q L’instruction include() est réévaluée à chaque passage et ne
provoque qu’un warning en cas d’erreur.
q L’instruction require() ne réévalue pas le contenu sur un second
passage et provoque une erreur en cas d’échec
24
Inclusions et arrêts prématurés
Les inclusions « require_once() et include_once() »
q require_once() et include_once() ont la même fonction que
require() et include().
q La seule différence est qu’elles s’assurent que le fichier que l’on
essaie d’inclure ne l’a pas déjà été.
q Cela se révèle pratique lors de l’utilisation de fonctions ou de
classes pour éviter les redéclarations qui engendrent des erreurs.
25
Inclusions et arrêts prématurés
Les inclusions
q La technique d'inclusion est pratique pour deux grands types
d'utilisation :
ü Inclure des définitions statiques : constantes, définitions de
fonctions. Dans ce cas, il faut plutôt utiliser les fonctions
include once ou require once afin d'éviter une éventuelle double
inclusion (qui provoquerait une erreur dans la définition des
fonctions).
26
Inclusions et arrêts prématurés
Les inclusions
ü Inclure du code PHP ou HTML dynamique qui s'exécute
effectivement au moment de l'inclusion : section HTML
commune à plusieurs pages (en-tête, pied de page) ou code
commun à plusieurs pages (bien que dans cette hypothèse, la
définition d'une fonction soit plus pertinente). Dans ce cas, il
faut plutôt utiliser les fonctions include ou require afin de
garantir que l'inclusion se produit à chaque appel.
27
Inclusions et arrêts prématurés
Les arrêts prématurés
q Dans le cas normal, un programme s’exécute du début à la fin.
q L'arrêt de l’exécution après avoir passé en vue toutes les
instructions est donc tout à fait logique.
q Il se peut qu'un programme s'arrête avant d'atteindre la fin prévue
et cela est du principalement à l'une des raisons suivantes:
28
Inclusions et arrêts prématurés
Les arrêts prématurés
q Erreur fatale: il s'agit d'une erreur stricte qui empêche le
programme de se poursuivre. Néanmoins, ce genre d'erreur pousse
le compilateur à ne rien exécuter du tout.
q Arrêt prématuré: il s'agit d'un arrêt programmé par le développeur.
Dans ce cas, même si le programme ne s’exécute pas en entier, son
arrêt est considéré comme normal car il a été prévu.
29
Inclusions et arrêts prématurés
Les arrêts prématurés
q Les fonctions exit() et die() sont similaires (des alias). Elles
arrêtent le programme à l'endroit où elle sont déclarées en
affichant le message passé en argument (en tant que chaîne de
caractères).
30
Programmation Orientée Objet
q La programmation procédurale consiste à écrire des procédures
ou des fonctions qui effectuent des opérations sur les données
q La programmation orientée objet consiste à créer des objets
contenant à la fois des données et des fonctions.
q Les classes et les objets sont les deux principaux aspects de la
programmation orientée objet.
q Une classe est un modèle pour les objets et un objet est une
instance d'une classe.
31
Programmation Orientée Objet
Rappelons d’abord qu’un objet possède des attributs et des méthodes, et doit
utiliser les mécanismes d’héritage et de polymorphisme.
ü Attribut à caractéristique d’un objet.
ü Méthode à action qui s’applique à un objet
ü Héritage à définition d’un objet comme appartenant à la même
famille qu’un autre objet plus général, dont il hérite des attributs et
des méthodes.
ü Polymorphisme à capacité d’un ensemble d’objet à exécuter des
méthodes de même nom, mais dont le comportement est propre à
32
chacune des différentes versions.
Programmation Orientée Objet
Les classes
q Une classe est la description complète d’un objet. Elle comprend
la déclaration des attributs ainsi que l’implémentation des
méthodes de cet objet.
q La création d’un objet est déclenchée par celle d’une instance de
la classe qui le décrit.
q Une bibliothèque de composants est un ensemble de fichiers
contenant des définitions de classes, que l’on peut inclure en tête
des programmes qui utilisent ces classes. 33
Programmation Orientée Objet
Les classes : Déclaration
q La déclaration d’une classe s’appuie sur le mot clé class.
q La syntaxe est comparable à celle de la déclaration des fonctions.
class ma_classe {
// Contenu de la classe
}
q Les attributs sont déclarés en utilisant la syntaxe des variables et
un des mots-clés suivants : public, private ou protected.
Exemple: //Il est possible de définir une valeur par défaut
class voiture { class voiture {
public $marque ; public $marque = 'ferrari’;
34
} }
Programmation Orientée Objet
Les classes :
q Les méthodes se déclarent exactement comme des fonctions.
q Deux classes différentes peuvent utiliser des méthodes avec le
même nom sans provoquer de conflit.
q L’exemple suivant définit une méthode freiner :
Exemple:
class voiture {
public $marque ;
function freiner( $force_de_freinage ) {
// Instructions pour faire freiner }
} 35
Programmation Orientée Objet
Les classes : Instanciation
q Pour pouvoir utiliser un objet, il faut d’abord le créer à partir
d’un modèle (la classe). On utilise la syntaxe d’affectation avec le
mot-cle new.
$nomObjet = new nom_Classe (valeur,…) ;
ü Valeur: paramètre éventuelle passe a la méthode constructeur de la
classe appelée.
q L’exemple suivant crée un objet de la classe voiture :
$mavoiture = new voiture ( ) ;
36
Programmation Orientée Objet
Les classes : Affectation
q Pour exploiter les méthodes et les propriétés d’un objet, on
utilise un accesseur dont la syntaxe est « -> »
$objet_test -> ma_méthode( ) ; // appelle la méthode
$objet_test -> ma_propriété ; // accède à la propriété
q $this-> est l'opérateur de self-référence.
$this -> nb_roues = 4 ;
37
Programmation Orientée Objet
Constructeur
q Le constructeur se déclare comme une méthode. Il doit porter le
nom de la classe comme en C++ .
q Une méthode particulière, nommée méthode constructeur, est
automatiquement appelée à la création ("instanciation") d'un
nouvel objet.
q La méthode constructeur d'une classe peut être nommée de
manière unifiée _construct.
38
Programmation Orientée Objet
Constructeur
q PHP recherche toujours une méthode nommée _construct; s'il
n'en trouve pas, il recherche une méthode portant le même nom
que la classe (ancienne méthode de nommage de la méthode
contructeur).
q Cette ancienne méthode de nommage de la classe constructeur
est dépréciée à partir de la version 7 et sera supprimée dans le
futur.
39
Programmation Orientée Objet
Attributs ou méthodes statiques
q Un attribut ou une méthode statique est utilisable directement
sans instanciation préalable d'un objet.
q Pour définir un attribut ou une méthode statique, il sufit de
placer le mot-clé static devant la définition de l'attribut ou de la
méthode.
q Pour référencer un attribut ou une méthode statique, il faut
utiliser la syntaxe nom classe::$nom_attribut ou nom_classe: :
nom méthode (). 40
Programmation Orientée Objet
Exemple:
41
Programmation Orientée Objet
Exemple:
42
Programmation Orientée Objet
L’ héritage
q L'héritage est possible en utilisant extends.
q La signification des différents éléments est la même que pour
la définition d'une classe.
q La nouvelle classe créée est appelée classe fille et la classe de
base est nommée classe mère.
q La nouvelle classe possède implicitement les attributs et
méthodes de la classe de base et peut en définir de nouveaux,
notamment une classe constructeur nommée _construct. 43
Programmation Orientée Objet
L’ héritage
q Si la classe fille n'a pas de méthode constructeur, c'est la
méthode constructeur de la classe mère qui est appelée lors de
l'instanciation d'un objet sur la classe fille.
q Quand la méthode constructeur existe dans la classe fille, il n'y
a pas d'appel automatique à la méthode constructeur de la
classe mère : si nécessaire, il faut l'appeler explicitement en
utilisant parent : : _construct ().
44
Programmation Orientée Objet
Interfaces
q Une interface est une classe qui ne contient que des
spécifications de méthodes sans implémentations.
q Une interface ne contient pas d'attribut non plus.
q D'autres classes peuvent être ensuite définies et implémenter une
ou plusieurs interfaces, c'est-à-dire implémenter les méthodes
d'une ou plusieurs interfaces.
45
Programmation Orientée Objet
Interfaces
q Syntaxe de définition d'une interface:
interface nom_interface {
// Définition des méthodes.
[public] function méthode ();
…}
q Les méthodes d'une interface sont forcément publiques; le mot-
clé public peut être omis.
46
Programmation Orientée Objet
Interfaces
q Il est possible de définir une nouvelle classe qui implémente une
ou plusieurs interfaces avec le mot-clé implements.
Syntaxe:
class nom_classe implements nom_interface_l, nom_interface_2,...{
……
}
47
Programmation Orientée Objet
Interfaces
q Une telle classe doit implémenter les différentes méthodes des
interfaces qu'elle implémente. Si l'une des méthodes des
interfaces n'est pas implémentée, la classe doit être déclarée
abstraite (abstract).
q La classe qui implémente une interface doit utiliser exactement
les mêmes signatures de méthodes que celles définies dans
l'interface; si ce n'est pas le cas, une erreur fatale se produit.
48
Programmation Orientée Objet
Interfaces
Exemple:
49
Programmation Orientée Objet
Gestion des exceptions
q Une exception est un mécanisme qui permet d’intercepter une
erreur générée par un script et de déclencher une action en
réponse à cette erreur.
q PHP fournit un mécanisme qui permet de gérer les conséquences
d’une erreur.
50
Programmation Orientée Objet
Gestion des exceptions
q Un gestionnaire d’exception a donc le structure suivante :
Ø Depuis la version 5.5, il
est possible d'inclure un
bloc finally après le bloc
catch.
Ø Le code présent dans le
bloc finally est toujours
exécuté après les blocs try
et catch, qu'une exception
se soit produite ou non.
51
Programmation Orientée Objet
Gestion des exceptions
Les méthodes de la classe Exception
52
Programmation Orientée Objet
Gestion des exceptions
q À l'intérieur du bloc try, une exception peut être levée par une
instruction du type throw new Exception (message [, code] )
Exemple:
53
Programmation Orientée Objet
Gestion des exceptions
q À l'intérieur du bloc try, une exception peut être levée par une
instruction du type throw new Exception (message [, code] )
Exemple:
Affichage
54
Exercice
Créez une classe représentant une personne.
Ø Elle doit avoir les propriétés nom, prénom et adresse, ainsi qu’un
constructeur et un destructeur.
Ø Une méthode getpersonne() doit retourner les coordonnées
complètes de la personne.
Ø Une méthode setadresse() doit permettre de modifier l’adresse
de la personne.
Ø Créez des objets personne, et utilisez l’ensemble des méthodes.
55