Internet et bases de
Internet et bases de
données
données
SIL-NTI
SIL-NTI
Université de Provence
Université de Provence
POO en Php5
POO en Php5
Définition de classe / objet
Définition de classe / objet
Constructeur / destructeur
Constructeur / destructeur
Visibilité
Visibilité
Différences entre PHP 4 et PHP 5
Différences entre PHP 4 et PHP 5
Classes abstraites et interfaces
Classes abstraites et interfaces
Héritage
Héritage
Sérialisation
Sérialisation
Clonage
Clonage
Programmation Objet en Php 5
Programmation Objet en Php 5
References :
References :
http://www.php.net/manual/fr/language.oop5.php
http://www.php.net/manual/fr/language.oop5.php
Classes et objets
Classes et objets
Une classe PHP regroupe
Des variables d’instance, représentés par des variables PHP
Des méthodes manipulant ces variables, définies par des fonctions
PHP
En PHP, soit on met la classe dans le même fichier que l'instance, soit on le met dans un autre fichier et on fait un include ou un require pour inclure le fichier contenant la classe.
(à différence de Java où les classes peuvent être instanciées dans d'autres fichiers du même package).
Exemple de classe
Exemple de classe
<?php<?php
class User{ // Déclaration de la classe
class User{ // Déclaration de la classe
var $name; // Une propriété
var $name; // Une propriété
function getName() // Une méthode
function getName() // Une méthode
{ return ucfirst($this->name); // premiere lettre majuscule }
{ return ucfirst($this->name); // premiere lettre majuscule }
}
}
// Création d'un objet à partir de la classe
// Création d'un objet à partir de la classe
$pierre = new User();
$pierre = new User();
// Modification d'une propriété
// Modification d'une propriété
$pierre->name = 'pierre';
$pierre->name = 'pierre';
// Accès à une méthode
// Accès à une méthode
echo $pierre->getName();
echo $pierre->getName();
?>
Quelques fonctions :
Quelques fonctions :
get_declared_classes()
get_declared_classes() : retourne un tableau listant toutes les classes définies : retourne un tableau listant toutes les classes définies class_exists($str)
class_exists($str) : vérifie qu'une classe dont le nom est passé en argument a : vérifie qu'une classe dont le nom est passé en argument a été définie
été définie
get_class($obj)
get_class($obj), , get_parent_classget_parent_class : retournent le nom de la classe (parent) de : retournent le nom de la classe (parent) de l’objet
l’objet $obj$obj
get_class_methods($str)
get_class_methods($str) : retourne les noms des méthodes de la classe : retourne les noms des méthodes de la classe $str$str dans un tableau
dans un tableau
get_class_vars($str)
get_class_vars($str) : retourne les valeurs par défaut des attributs de la classe : retourne les valeurs par défaut des attributs de la classe $str
$str dans un tableau associatif dans un tableau associatif get_object_vars($obj)
get_object_vars($obj) : retourne un tableau associatif des attributs de l’objet : retourne un tableau associatif des attributs de l’objet $obj
$obj les clés sont les noms des attributs et les valeurs, celles des attributs si les clés sont les noms des attributs et les valeurs, celles des attributs si elles existent
elles existent
is_subclass_of($obj,$str)
is_subclass_of($obj,$str) : détermine si l’objet : détermine si l’objet $obj$obj est une instanciation d’une est une instanciation d’une sous-classe de
sous-classe de $str$str, retourne VRAI ou FAUX, retourne VRAI ou FAUX method_exists($obj,$str)
method_exists($obj,$str) : vérifie que la méthode : vérifie que la méthode $str$str existe pour une classe existe pour une classe dont
Php4 vs PHp5
Php4 vs PHp5
En PHP 5, intervient la notion de visibilité.En PHP 5, intervient la notion de visibilité.
Clonage d’objet : Accessible grâce à la méthode __clone() Clonage d’objet : Accessible grâce à la méthode __clone() Unification des constructeurs: En PHP4, nom de la classe; En Unification des constructeurs: En PHP4, nom de la classe; En
PHP5, méthode __construct()
PHP5, méthode __construct()
Destructeurs : Méthode __destruct()Destructeurs : Méthode __destruct()
Constantes dans les classes : Mot clé const Constantes dans les classes : Mot clé const Exceptions : Blocs try/catchExceptions : Blocs try/catch
H
Héritage
Mot clef « extends » Pas d’héritage multiple Possibilité de surcharge<?
class Chef extends Personne {
public $secretaire; // Personne
function maFonction () { Personne::maFonction(); echo "prérogatives en plus"; }
} ?>
Héritage
Héritage
class User { class User { protected $name; protected $name;public function setName($name) {
public function setName($name) {
$this->name = $name; } $this->name = $name; }
public function getName() {
public function getName() {
return ucfirst($this->name); }return ucfirst($this->name); } }
}
class Administrator extends User {
class Administrator extends User {
private $level = 'administrator';
private $level = 'administrator';
}
Héritage
Héritage
Administrator hérite de User : on peut se servir de toutes les
Administrator hérite de User : on peut se servir de toutes les
méthodes de la classe User.
méthodes de la classe User.
$admin = new Administrator();
$admin = new Administrator();
$admin->setName('jean');
$admin->setName('jean');
echo $admin->getName();
Visibilité
Visibilité
•
•
La visibilité s’applique à une propriété ou une méthode.
La visibilité s’applique à une propriété ou une méthode.
Privé (private) :
Privé (private) :
n’est accessible que dans la classe courante.
n’est accessible que dans la classe courante.
Protégé (protected) :
Protégé (protected) :
est accessible dans la classe courante et dans les
est accessible dans la classe courante et dans les
classes dérivées.
classes dérivées.
Publique (public) :
Publique (public) :
Exemple
Exemple
<?php <?php class Vehicule{ class Vehicule{ public $_plaque; public $_plaque; protected $_marque; protected $_marque; protected $_estRepare; protected $_estRepare;public function __construct($marque) {
public function __construct($marque) {
$this->_marque = $marque;
$this->_marque = $marque;
$this->_estRepare = false;}
$this->_estRepare = false;}
// Met le véhicule en maintenance
// Met le véhicule en maintenance
public function reparer(){
public function reparer(){
$this->_estRepare = true;
$this->_estRepare = true;
echo
echo 'Le véhicule est en réparation';} 'Le véhicule est en réparation';} }
Exemple
Exemple
class Voiture extends Vehicule{
class Voiture extends Vehicule{
private $_volumeCarburant;
private $_volumeCarburant;
public function __construct($marque){
public function __construct($marque){
// Appel du constructeur de la classe parente
// Appel du constructeur de la classe parente
parent::__construct($marque);
parent::__construct($marque);
$this->_volumeCarburant = 40;}
$this->_volumeCarburant = 40;}
// Démarre la voiture si le réservoir n'est pas vide
// Démarre la voiture si le réservoir n'est pas vide
public function demarrer() {
public function demarrer() {
$niveau = $this->_volumeCarburant
$niveau = $this->_volumeCarburant
if ($niveau > 0){
if ($niveau > 0){
echo
echo 'Le véhicule démarre'; return true;} 'Le véhicule démarre'; return true;} echo
echo 'Le réservoir est vide...';return false;} 'Le réservoir est vide...';return false;} }
Publique
Publique
C'est l'accès par défaut de PHP si l'on ne précise aucune visibilité.
C'est l'accès par défaut de PHP si l'on ne précise aucune visibilité.
Le mot-clé public indique que les propriétés et méthodes d'un objet seront
Le mot-clé public indique que les propriétés et méthodes d'un objet seront
accessibles depuis n'importe où dans le programme.
accessibles depuis n'importe où dans le programme.
<?php
<?php
// Instanciation de l'objet : appel implicite à la méthode __construct()
// Instanciation de l'objet : appel implicite à la méthode __construct()
$monVehicule = new Vehicule();
$monVehicule = new Vehicule();
// Mise à jour de la plaque du véhicule
// Mise à jour de la plaque du véhicule
$monVehicule->plaque = ’13AB017';
$monVehicule->plaque = ’13AB017';
// Affichage de la plaque du véhicule
// Affichage de la plaque du véhicule
echo $monVehicule->plaque;
echo $monVehicule->plaque;
?>
Private et protected
Private et protected
Le mot-clé private permet de déclarer des attributs et des méthodes qui ne seront
Le mot-clé private permet de déclarer des attributs et des méthodes qui ne seront
visibles et accessibles directement que depuis l'intérieur même de la classe.
visibles et accessibles directement que depuis l'intérieur même de la classe.
Une méthode est déclarée private lorsqu'elle n'a pas vocation à être utilisée en
Une méthode est déclarée private lorsqu'elle n'a pas vocation à être utilisée en
dehors de la classe.
dehors de la classe.
il devient impossible de lire ou d'écrire la valeur d'un attribut privé directement en
il devient impossible de lire ou d'écrire la valeur d'un attribut privé directement en
faisant
faisant
$maVoiture = new Voiture();
$maVoiture = new Voiture(); $maVoiture->_volumeCarburant.
$maVoiture->_volumeCarburant.
L'accès Protected permet d'utiliser des attributs et méthodes communs dans une
L'accès Protected permet d'utiliser des attributs et méthodes communs dans une
classe parente et ses classes dérivées (héritantes).
Private
Private
La valeur de l'attribut privé $_volumeCarburant est initialisée dans le La valeur de l'attribut privé $_volumeCarburant est initialisée dans le
constructeur de la classe.
constructeur de la classe.
Pour mettre à jour la valeur de l'attribut, on utilise la méthode Pour mettre à jour la valeur de l'attribut, on utilise la méthode
setVolumeCarburant(), une méthode publique à laquelle on passe en
setVolumeCarburant(), une méthode publique à laquelle on passe en
paramètre la nouvelle valeur à affecter à l'attribut.
paramètre la nouvelle valeur à affecter à l'attribut.
public function setVolumeCarburant($dVolume)public function setVolumeCarburant($dVolume) { $this->_volumeCarburant = $dVolume; }{ $this->_volumeCarburant = $dVolume; }
Pour recuperer cette valeur, sachant que l'accès direct à l'attribut est interdit, Pour recuperer cette valeur, sachant que l'accès direct à l'attribut est interdit,
on déclare une méthode qui va se charger de retourner la valeur de l'attribut
on déclare une méthode qui va se charger de retourner la valeur de l'attribut
: une fonction avec une instruction return.
: une fonction avec une instruction return.
public function getVolumeCarburant()public function getVolumeCarburant() { return $this->_volumeCarburant; }{ return $this->_volumeCarburant; }
Constantes
Constantes
<?php
<?php
class Personne{
class Personne{
public $nom;
public $nom;
public $prenom;
public $prenom;
const NOMBRE_DE_YEUX = 2;
const NOMBRE_DE_YEUX = 2;
const NOMBRE_DE_MAINS = 2;
const NOMBRE_DE_MAINS = 2;
public function __construct() { };
public function __construct() { };
…
…
}
Accès aux constantes
Accès aux constantes
L'accès aux constantes ne peut se faire qu'en lecture via l'opérateur ::
L'accès aux constantes ne peut se faire qu'en lecture via l'opérateur ::
<?php
<?php
echo 'Chaque personne a ', Personne::NOMBRE_DE_YEUX ,' yeux.';
echo 'Chaque personne a ', Personne::NOMBRE_DE_YEUX ,' yeux.';
?>
?>
L'exécution de ce code affiche la chaine suivante sur la sortie standard :
L'exécution de ce code affiche la chaine suivante sur la sortie standard :
Chaque personne a 2 yeux.
Chaque personne a 2 yeux.
Remarque : si l'on tente de redéfinir la valeur d'une constante, PHP génèrera une
Remarque : si l'on tente de redéfinir la valeur d'une constante, PHP génèrera une
erreur de ce type :
erreur de ce type :
Parse error: syntax error, unexpected '=' in /Users/Emacs/Personne.php on line
Parse error: syntax error, unexpected '=' in /Users/Emacs/Personne.php on line
36
Attributs et méthodes statiques
Attributs et méthodes statiques
L'opérateur :: est utilisé pour appeler des éléments appartenant à L'opérateur :: est utilisé pour appeler des éléments appartenant à une classe (et non pas à un objet).
une classe (et non pas à un objet).
Les attributs et méthodes appartenant à une classe sont dits statiques.
Les attributs et méthodes appartenant à une classe sont dits statiques.
il n'y a pas de variable $this dans la méthode car elle est faite pour agir
il n'y a pas de variable $this dans la méthode car elle est faite pour agir
sur la classe et non sur un objet. On utilisera donc le mot-clé
sur la classe et non sur un objet. On utilisera donc le mot-clé selfself. . Les attributs statiques servent à avoir des attributs indépendants de
Les attributs statiques servent à avoir des attributs indépendants de
tout objet: si l'un des objets modifie sa valeur, tous les autres objets
tout objet: si l'un des objets modifie sa valeur, tous les autres objets
qui accèderont à cet attribut obtiendront la nouvelle valeur. ( un
qui accèderont à cet attribut obtiendront la nouvelle valeur. ( un
attribut statique appartenant à la classe, il n'existe qu'en un seul
attribut statique appartenant à la classe, il n'existe qu'en un seul
exemplaire. )
Exemple
Exemple
<?php <?phpclass Test {class Test {
private static $compteur = 0;private static $compteur = 0;
public function __construct() { public function __construct() {
// On instancie la variable $compteur qui appartient à la classe // On instancie la variable $compteur qui appartient à la classe
self::$compteur++;self::$compteur++;
} }
public static function getCompteur() {public static function getCompteur() {
return self::$compteur;return self::$compteur; }} }}
Exemple
Exemple
$test1 = new Test;$test1 = new Test;
$test2 = new Test;$test2 = new Test;
$test3 = new Test;$test3 = new Test;
echo Test::getCompteur();echo Test::getCompteur(); ?>
Interface
Interface
•• Un héritage permet de regrouper des objets de manière verticale : Un héritage permet de regrouper des objets de manière verticale : Chaque classe fille hérite de fonctionnalités de la classe mèreChaque classe fille hérite de fonctionnalités de la classe mère
•
• Une interface permet de regrouper des objets de manière transversale Une interface permet de regrouper des objets de manière transversale :
:
Un groupe d’objets peut implémenter une interfaceUn groupe d’objets peut implémenter une interface
Une interface impose la présence de fonctionnalités dans ces objetsUne interface impose la présence de fonctionnalités dans ces objets Si une classe mère implémente une interface, ses classes filles Si une classe mère implémente une interface, ses classes filles
l’implémentent aussi par héritage
Interface
Interface
Une interface se déclare comme une classe, avec le mot clé Une interface se déclare comme une classe, avec le mot clé
‘interface’
‘interface’
Une interface ne contient que des déclarations de méthodes, Une interface ne contient que des déclarations de méthodes,
sans contenu
sans contenu
Ces méthodes ainsi déclarées doivent oblitagoirement être Ces méthodes ainsi déclarées doivent oblitagoirement être
redéclarées dans les classes qui implémentent l’interface
Exemple
Exemple
interface Surface_Interface{
interface Surface_Interface{
public function getAire();
public function getAire();
}
}
class Rectangle implements Surface_Interface{
class Rectangle implements Surface_Interface{
// ...
// ...
public function getAire()
public function getAire()
{ // ... }
{ // ... }
}
}
Implémentation de l’interface par héritage avec Rectangle : Implémentation de l’interface par héritage avec Rectangle :
class Carre extends Rectangle{ // ... }
Exemple
Exemple
// Une interface 'Volume' qui impose 'getVolume()‘
// Une interface 'Volume' qui impose 'getVolume()‘
interface Volume_Interface{
interface Volume_Interface{
public function getVolume();
public function getVolume();
}
}
class Cube implements Surface_Interface, Volume_Interface {
class Cube implements Surface_Interface, Volume_Interface {
public function getAire() { // ... }
public function getAire() { // ... }
public function getVolume() { // ... }
public function getVolume() { // ... }
}
Classe abstraite
Classe abstraite
Une classe abstraite ne peut être instanciée
Une classe abstraite ne peut être instanciée
En d’autres termes : on ne peut pas créer un objet avec
En d’autres termes : on ne peut pas créer un objet avec
une classe abstraite
une classe abstraite
Une classe abstraite est destinée à être utilisée comme
Une classe abstraite est destinée à être utilisée comme
classe mère d’autres classes
classe mère d’autres classes
La déclaration d’une classe abstraite se fait avec le mot clé
La déclaration d’une classe abstraite se fait avec le mot clé
‘abstract’
‘abstract’
•
Classe finale
Classe finale
une classe « finale » ne pourra plus être dérivée par une sous-une classe « finale » ne pourra plus être dérivée par une sous-classe : ses attributs et méthodes ne pourront plus être redéfinis.
classe : ses attributs et méthodes ne pourront plus être redéfinis.
On utilise le mot-clé « On utilise le mot-clé « finalfinal » qui peut-être appliqué soit à une » qui peut-être appliqué soit à une classe ou bien à une seule méthode.
classe ou bien à une seule méthode.
final class Homme extends EtreHumain
final class Homme extends EtreHumain {…} {…}
Utiliser les classes abstraites et / ou finales te permet de maîtriser la Utiliser les classes abstraites et / ou finales te permet de maîtriser la manière dont sont utilisées tes classes.
manière dont sont utilisées tes classes.
Avec les méthodes abstraites, on oblige la dérivation et empêche Avec les méthodes abstraites, on oblige la dérivation et empêche l'instanciation tandis qu'avec les classes finales, on interdit toute
l'instanciation tandis qu'avec les classes finales, on interdit toute
généralisation.
Les exceptions
Les exceptions
• Les fonctions internes de PHP utilisent principalement l' Error reporting, seules les extensions orientées objet utilisent les exceptions.
• Une exception peut être lancée ("throw") et attrapée ("catch") dans PHP. Le code devra être entouré d'un bloc try . Chaque try doit avoir au moins un bloc catch correspondant.
• L'objet lancé doit être une instance de la classe Exception (ou une de ses sous-classes). Autrement, on aura une erreur fatale émise par PHP.
• La bibliothèque standard PHP (SPL) fournit un bon nombre d'exceptions en dur.
Les exceptions
Les exceptions
PHP nous offre la possibilité d'hériter la classe Exception afin de PHP nous offre la possibilité d'hériter la classe Exception afin de
personnaliser nos exceptions.
personnaliser nos exceptions.
On a accès aux attributs protégés de la classe et on peut réécrire les On a accès aux attributs protégés de la classe et on peut réécrire les
méthodes __construct et __toString. Toutes les autres méthodes sont
méthodes __construct et __toString. Toutes les autres méthodes sont
finales.
finales.
<?php
<?php
class Exceptionclass Exception
{{
protected $message = 'exception inconnu'; // message de l'exceptionprotected $message = 'exception inconnu'; // message de l'exception
protected $code = 0; // code de l'exception défini par l'utilisateurprotected $code = 0; // code de l'exception défini par l'utilisateur
protected $file; // nom du fichier source de l'exceptionprotected $file; // nom du fichier source de l'exception
Les exceptions
Les exceptions
final function getMessage(); // message de l'exception
final function getMessage(); // message de l'exception
final function getCode(); // code de l'exceptionfinal function getCode(); // code de l'exception
final function getFile(); // nom du fichier sourcefinal function getFile(); // nom du fichier source
final function getLine(); // ligne du fichier sourcefinal function getLine(); // ligne du fichier source
final function getTrace(); // un tableau de backtrace()final function getTrace(); // un tableau de backtrace()
final function getTraceAsString(); // chaîne formattée de tracefinal function getTraceAsString(); // chaîne formattée de trace
/* Remplacable *//* Remplacable */
function __construct ($message = NULL, $code = 0);function __construct ($message = NULL, $code = 0);
function __toString(); // chaîne formatée pour l'affichagefunction __toString(); // chaîne formatée pour l'affichage
}} ?>
Les exceptions
Les exceptions
<?php function inverse($x) { if (!$x) {throw new Exception('Division par zéro.'); } else return 1/$x; } try { echo inverse(5) . "\n"; echo inverse(0) . "\n"; } catch (Exception $e) {
echo 'Exception reçue : ', $e->getMessage(), "\n"; }
echo 'Bonjour le monde !'; // Continue execution ?>
Affichera : 0.2
Exception reçue : Division par zéro. Hello World
Les exceptions
Les exceptions
class FileException extends Exception{
class FileException extends Exception{
protected $timestamp;
protected $timestamp;
public function __construct($message=NULL, $code=0)
public function __construct($message=NULL, $code=0)
{ { parent::__construct($message, $code); parent::__construct($message, $code); $this->timestamp = time(); $this->timestamp = time(); } }
public function getTimestamp() {
public function getTimestamp() {
return $this->timestamp; return $this->timestamp; } } } }
Les exceptions
Les exceptions
<?php
<?php
// Import de la classes précédente
// Import de la classes précédente
require_once(dirname(__FILE__).'/FileException.class.php'); require_once(dirname(__FILE__).'/FileException.class.php'); $fichier = '/var/www/projet/toto.txt'; $fichier = '/var/www/projet/toto.txt'; try{ try{ // Le fichier existe-t-il ? // Le fichier existe-t-il ? if(!file_exists($fichier)) { if(!file_exists($fichier)) {
throw new FileException('Le fichier '. $fichier .' est inexistant');
throw new FileException('Le fichier '. $fichier .' est inexistant');
}
}
// A-t-on ouvert le fichier en mode écriture ?
// A-t-on ouvert le fichier en mode écriture ?
if(!($fp = @fopen($fichier,'w'))) {
if(!($fp = @fopen($fichier,'w'))) {
throw new FileException('L\'ouverture du fichier '. $fichier .' a échoué');
throw new FileException('L\'ouverture du fichier '. $fichier .' a échoué');
}
Les exceptions
Les exceptions
// J'écris dans mon fichier
// J'écris dans mon fichier
fwrite($fp, "Coucou Emacs\n");
fwrite($fp, "Coucou Emacs\n");
fclose($fp);
fclose($fp);
}
}
catch(FileException $e){ // Devrait être attrapée
catch(FileException $e){ // Devrait être attrapée
exit($e->getMessage());
exit($e->getMessage());
}
}
catch(Exception $e){ // Sauté
catch(Exception $e){ // Sauté
exit($e->getMessage()); exit($e->getMessage()); } } ?> ?>
Les exceptions
Les exceptions
il est important de mettre en premier le bloc catch() indiquant l'erreur
la plus précise (donc la classe la plus basse par héritage).
La classe Exception, la plus générale, doit arriver dans le dernier
bloc catch(). Une exception de type FileException et aussi par héritage une exception de type Exception.
Si le bloc catch() du type Exception est placé avant les autres, alors
Les constantes magiques
Les constantes magiques
Donnent des informations sur:
Donnent des informations sur:
Le chemin du fichier PHP courant : _FILE_
Le chemin du fichier PHP courant : _FILE_
Le nom de la fonction courante : _FUNCTION_
Le nom de la fonction courante : _FUNCTION_
Le nom de la classe courante : _CLASS_
Le nom de la classe courante : _CLASS_
Exemple
Exemple
<?php
<?php
// Trouver le chemin vers le fichier PHP courant
// Trouver le chemin vers le fichier PHP courant
$path = dirname(__FILE__);
$path = dirname(__FILE__);
// Pour éviter d'appeller dirname à chaque fois, vous pouvez créer une fonction
// Pour éviter d'appeller dirname à chaque fois, vous pouvez créer une fonction
// ou une méthode
// ou une méthode
function getPath(){
function getPath(){
static $path = null;
static $path = null;
if ($path === null) { if ($path === null) { $path = dirname(__FILE__); $path = dirname(__FILE__); } } return $path; return $path; } }
Méthodes magiques
Méthodes magiques
Sont appelées automatiquement:
Sont appelées automatiquement:
Quand un objet se crée : _construct()
Quand un objet se crée : _construct()
Quand un objet meurt : _destruct()
Quand un objet meurt : _destruct()
Quand un objet est dupliqué : _clone()
Quand un objet est dupliqué : _clone()
Quand on appelle une méthode inconnue : _call()
Quand on appelle une méthode inconnue : _call()
Quand on affecte une propriété inconnue : _set()
Quand on affecte une propriété inconnue : _set()
Quand on veut la valeur d’une prop. inc. : _get()
Quand on veut la valeur d’une prop. inc. : _get()
Quand on met un ‘echo’ devant l’objet : _toString()
Quand on met un ‘echo’ devant l’objet : _toString()
Quand on sérialise un objet : _sleep()
Quand on sérialise un objet : _sleep()
Constructeur
Constructeur
__construct
__construct
Le constructeur est une méthode dite “magique”:
Le constructeur est une méthode dite “magique”:
elle est appelée automatiquement à la création
elle est appelée automatiquement à la création
d’un obiet à partir d’une classe.
d’un obiet à partir d’une classe.
On appelle souvent le constructeur pour charger
On appelle souvent le constructeur pour charger
des propriétés (par exemple une connexion à la
des propriétés (par exemple une connexion à la
base de données).
base de données).
En PHP4, le constructeur est la méthode qui
En PHP4, le constructeur est la méthode qui
porte le nom de la classe. Cette variante est
porte le nom de la classe. Cette variante est
encore valable en PHP5 bien que dépréciée.
Destructeur
Destructeur
__destruct
__destruct
•
•
Comment marche un destructeur?
Comment marche un destructeur?
le destructeur est appelé à la fin de la vie d’un objet et
le destructeur est appelé à la fin de la vie d’un objet et
sert généralement à faire des nettoyages :
sert généralement à faire des nettoyages :
•
•
Fermeture de la connexion à la base de données.
Fermeture de la connexion à la base de données.
•
•
Nettoyage du contexte d’un objet (suppression de fichiers
Nettoyage du contexte d’un objet (suppression de fichiers
temporaires, vidage cache, etc.)
temporaires, vidage cache, etc.)
La fin de vie d’un objet peut subvenir à la fin du script,
La fin de vie d’un objet peut subvenir à la fin du script,
lorsque l’on supprime la variable qui contient l’objet
lorsque l’on supprime la variable qui contient l’objet
(unset) ou lorsque l’on remplace son contenu
(unset) ou lorsque l’on remplace son contenu
(affectation).
__clone
__clone
en PHP4 :l’affectation d'un objet un autre quivaut une copie. à é à
On peut avoir l’affectation par r f rence gr ce au symbole & : é é â $obj1 = & $obj2
en PHP5 :
Affectation par d faut par r f renceé é é
Exemple
Exemple
<?
class Toto {
var $nom;
function Toto() {
$this->nom = "I'm Toto!\n";
}}
$toto = new Toto;
echo $toto->nom;
$tati = $toto;
$tati->nom = "I'm Tati!\n";
echo $toto->name;
Exemple suite
Exemple suite
En PHP4 (je redéfinie la méthode dans la copie, pas dans l'objet initiale) :
I'm Toto! I'm Toto!
En PHP5
I'm Toto! I'm Tati!
Comparaison d’objets
Comparaison d’objets
• opérateur de comparaison ‘’
opérateur de comparaison ‘’
== ‘’
== ‘’
deux objets sont égaux s'ils ont les mêmes attributs et
deux objets sont égaux s'ils ont les mêmes attributs et
valeurs, et qu'ils sont des instances de la même classe.
valeurs, et qu'ils sont des instances de la même classe.
• opérateur d'identité ‘’
opérateur d'identité ‘’
===
===
‘’
‘’
les objets sont identiques uniquement s'ils font référence
les objets sont identiques uniquement s'ils font référence
à la même instance de la même classe
Exemple
Exemple
$p = new personne(); $o = new personne();
$p = new personne(); $o = new personne();
$r = $p;
$r = $p;
$a = new animal();
$a = new animal();
Deux instances de la même classe
Deux instances de la même classe
$o == $p : TRUE
$o == $p : TRUE
$o === $p : FALSE
$o === $p : FALSE
Deux références sur le même objet
Deux références sur le même objet
$p == $r : TRUE
$p == $r : TRUE
$p === $r : TRUE
$p === $r : TRUE
Instances de classes différentes
Instances de classes différentes
$p == $a : FALSE
$p == $a : FALSE
$p === $a : FALSE
Surcharge
Surcharge
La surcharge magique en PHP permet de créer
La surcharge magique en PHP permet de créer
dynamiquement des propriétés et des méthodes.
dynamiquement des propriétés et des méthodes.
Ces entités dynamiques sont traitées via des méthodes
Ces entités dynamiques sont traitées via des méthodes
magiques (définies comme
magiques (définies comme
public
public
et avec des arguments
et avec des arguments
passés par valeur).
passés par valeur).
NOTE : L'interprétation PHP de la "surcharge" est différente
NOTE : L'interprétation PHP de la "surcharge" est différente
de la plupart des langages orientés objet (où on fournit la
de la plupart des langages orientés objet (où on fournit la
possibilité d'avoir plusieurs méthodes portant le même
possibilité d'avoir plusieurs méthodes portant le même
nom, mais avec une quantité et des types différents
nom, mais avec une quantité et des types différents
d'arguments).
__set($property, $value)
__set($property, $value)
<?php <?php class CompteClient { class CompteClient { } }$monCompte = new CompteClient();
$monCompte = new CompteClient();
$monCompte->solde = 10000;
$monCompte->solde = 10000;
echo
echo ‘J’ai', $monCompte->solde,' dollars et je suis riche'; ‘J’ai', $monCompte->solde,' dollars et je suis riche'; ?>
?>
Vous pouvez renseigner et ensuite récuperer des propriétés à un objet php,
Vous pouvez renseigner et ensuite récuperer des propriétés à un objet php,
sans que celles-ci aient été déclarées dans votre classe.
sans que celles-ci aient été déclarées dans votre classe.
En effet,
En effet, PHPPHP appelle automatiquement de manière implicite la méthode appelle automatiquement de manière implicite la méthode
magique __set() qui permet de faire ce que l'on appelle de la surcharge de
magique __set() qui permet de faire ce que l'on appelle de la surcharge de
propriétés d'une classe.
__set
__set
($property,$value)
($property,$value)
La méthode __set peut être redéfinie dans la classe pour exécuter du
La méthode __set peut être redéfinie dans la classe pour exécuter du
code personnalisé lorsque
code personnalisé lorsque PHPPHP appelle implicitement cette appelle implicitement cette méthode.
méthode.
public function __set($property,$value) {
public function __set($property,$value) {
If (‘solde' === $property &&
If (‘solde' === $property && ctypectype_digit_digit($value)) {($value)) { $this->solde = (int) $value; }
$this->solde = (int) $value; }
else {throw new Exception('Propriété ou valeur invalide !');}
else {throw new Exception('Propriété ou valeur invalide !');}
}
}
ctype
__call($method,
__call($method,
$arguments)
$arguments)
La méthode magique __call() permet d’appeler une méthode qui n'a pas été déclarée dans votre classe.
Exemple : création d'un moteur de recherche
On défini une classe qui effectue une recherche dans la base de données à partir des critères fournis en argument
<?php
class SearchEngine {
public function search($conditions = array()){ $query = 'SELECT id FROM table';
if(sizeof($conditions) > 0) {
$query.=' WHERE '.implode(' AND ',$conditions); }
$result = SPDO::getInstance()->query($query); $return = $result->fetchAll(PDO::FETCH_ASSOC); return $return;
__call()
__call()
/**Méthode magique __call() permettant d'appeller une méthode virtuelle* du
/**Méthode magique __call() permettant d'appeller une méthode virtuelle* du
type searchByName(), searchByAge() ou searchByNameAndAge */
type searchByName(), searchByAge() ou searchByNameAndAge */
public function __call($method,$args){
public function __call($method,$args){
if(if(pregpreg_match_match('#^searchBy#i',$method)){('#^searchBy#i',$method)){
$searchConditions = $searchConditions = strstr_replace_replace('searchBy','',$method);('searchBy','',$method);
$searchCriterias = $searchCriterias = explodeexplode('and',$searchConditions);('and',$searchConditions);
$conditions = $conditions = arrayarray();();
$nbCriterias = $nbCriterias = sizeofsizeof($searchCriterias);($searchCriterias);
for($i=0; $i < $nbCriterias; $i++){for($i=0; $i < $nbCriterias; $i++){
$conditions[] = $conditions[] = strtolowerstrtolower($searchCriterias[$i]).'=" '.$args[$i] . ' " ';($searchCriterias[$i]).'=" '.$args[$i] . ' " ';
}}
return $this->search($conditions);return $this->search($conditions); }} return null;} return null;} } } ?> ?>
Inconvenients
Inconvenients
Les méthodes magiques __get() __set() et __call() possèdent deux
Les méthodes magiques __get() __set() et __call() possèdent deux
inconvénients non négligeables :
inconvénients non négligeables :
empêche la génération automatique de documentation de code au empêche la génération automatique de documentation de code au moyen des APIs (PHPDocumentor par exemple)
moyen des APIs (PHPDocumentor par exemple)
empêche également les IDE tels qu'Eclipse d'introspecter le code de empêche également les IDE tels qu'Eclipse d'introspecter le code de la classe et ainsi proposer l'auto-complétion du code.
la classe et ainsi proposer l'auto-complétion du code.
A utiliser donc avec parcimonie
Sérialisation
Sérialisation
Les objets en tant que tel ne peuvent être transmis d’un programme à
Les objets en tant que tel ne peuvent être transmis d’un programme à
l’autre via un réseau, car ils contiennent des caractères non
l’autre via un réseau, car ils contiennent des caractères non
imprimables
imprimables
•
• Sérialisation = transformation d’une donnée complexe (objet, tableau) Sérialisation = transformation d’une donnée complexe (objet, tableau) en une chaîne de caractère imprimable (représentation linéaire).
en une chaîne de caractère imprimable (représentation linéaire).
•
• Désérialisation = transformation d’une chaîne sérialisée en sa donnée Désérialisation = transformation d’une chaîne sérialisée en sa donnée d’origine.
d’origine.
Utilité :
Utilité :
•
• Transmission de données complexesTransmission de données complexes •
Exemple
Exemple
<?php <?php class User { class User { public $name; public $name; } }$user = new User();
$user = new User();
$user->name = "Seth"; $user->name = "Seth"; $serializedUser = serialize($user); $serializedUser = serialize($user); echo $serializedUser . "\n\n"; echo $serializedUser . "\n\n"; $user2 = unserialize($serializedUser); $user2 = unserialize($serializedUser); print_r($user2); print_r($user2); ?> ?>
Ce qui donne comme résultat :
Ce qui donne comme résultat :
O:4:"User":1:{s:4:"name";s:4:"Seth";}O:4:"User":1:{s:4:"name";s:4:"Seth";} User Object( [name] => Seth ) User Object( [name] => Seth )
Sérialisation
Sérialisation
UtiliserUtiliser serialize()serialize() pour sauvegarder un objet conservera toutes ses pour sauvegarder un objet conservera toutes ses variables. Ses méthodes ne seront pas conservées, seulement le
variables. Ses méthodes ne seront pas conservées, seulement le
nom de la classe.
nom de la classe.
Afin de pouvoir désérialiser (
Afin de pouvoir désérialiser (unserialize()unserialize()) un objet, la classe de l'objet ) un objet, la classe de l'objet doit être définie pour permettre sa reconstruction.
doit être définie pour permettre sa reconstruction.
⇒ Il faudra inclure le fichier de définition de la classe pour désérialiser Il faudra inclure le fichier de définition de la classe pour désérialiser un objet dans un endroit où la classe A n'est pas définie.
un objet dans un endroit où la classe A n'est pas définie.
La fonction de serialisation est automatiquement appelée sur l'array
La fonction de serialisation est automatiquement appelée sur l'array
$_SESSION à la fin du script.
$_SESSION à la fin du script.
Les objets sauvegardés comme variables de session sont désérialisés
Les objets sauvegardés comme variables de session sont désérialisés
automatiquement à chaque page où la session est démarrée.
__sleep et __wakeup
__sleep et __wakeup
La méthode __sleep est exécutée avant chaque sérialisation. Elle La méthode __sleep est exécutée avant chaque sérialisation. Elle 'nettoie' l'objet et renvoie un tableau avec les noms des variables de
'nettoie' l'objet et renvoie un tableau avec les noms des variables de
l'objet qu'on veut garder pour la sérialisation. (Cette méthode est
l'objet qu'on veut garder pour la sérialisation. (Cette méthode est
utile sur des grands objets qui n'ont pas besoin d'être sauvegardés
utile sur des grands objets qui n'ont pas besoin d'être sauvegardés
en entier. )
en entier. )
La méthode __wakeup est exécutée avant chaque de-sérialisation. La méthode __wakeup est exécutée avant chaque de-sérialisation. Elle effectue des tâches de reinitialisation (par exemple elle rétablie
Elle effectue des tâches de reinitialisation (par exemple elle rétablie
les connexions aux BD perdues lors de la sérialisation) .
Exemple
Exemple
<?php <?php class Connection { class Connection {protected $link;protected $link;
private $server, $username, $password, $db;private $server, $username, $password, $db;
public function __construct($server, $username, $password, $db) {public function __construct($server, $username, $password, $db) {
$this->server = $server;$this->server = $server;
$this->username = $username;$this->username = $username;
$this->password = $password;$this->password = $password; $this->db = $db;$this->db = $db; $this->connect();$this->connect(); }}
Exemple
Exemple
private function connect() {
private function connect() {
$this->link = $this->link =
mysql_connect($this->server, $this->username, $this->password);mysql_connect($this->server, $this->username, $this->password);
mysql_select_db($this->db, $this->link);mysql_select_db($this->db, $this->link);
}}
public function __sleep() {public function __sleep() {
return array('server', 'username', 'password', 'db'); }return array('server', 'username', 'password', 'db'); }
public function __wakeup(){public function __wakeup(){ $this->connect(); }$this->connect(); } } } ?> ?>
Typage objet
Typage objet
En PHP5 les fonctions peuvent imposer aux paramètres d'être des
En PHP5 les fonctions peuvent imposer aux paramètres d'être des
objets ou des tableaux (Le typage avec les types traditionnels, tels
objets ou des tableaux (Le typage avec les types traditionnels, tels
que
que intint et et stringstring, n'est pas supporté. ), n'est pas supporté. ) class MaClasse {
class MaClasse {
public $var = 'Bonjour le monde!';
public $var = 'Bonjour le monde!';
}
}
/* Le premier paramètre doit être un objet de type MaClasse */
/* Le premier paramètre doit être un objet de type MaClasse */
function MaFonction(MaClasse $par) {
function MaFonction(MaClasse $par) {
echo $par->var;
echo $par->var;
}
}
$maclasse = new MaClasse;
$maclasse = new MaClasse;
MaFonction($maclasse); // affichera 'Bonjour le monde!’
Exemple
Exemple
class MaClasseclass MaClasse
{ // Le premier paramètre doit être un tableau
{ // Le premier paramètre doit être un tableau
public function test_array(array $input) {
public function test_array(array $input) {
print_r($input_array); print_r($input_array); } } } }
$maclasse = new MaClasse;
$maclasse = new MaClasse;
// erreur fatale : Argument 1 doit être un tableau
// erreur fatale : Argument 1 doit être un tableau
$myclass->test_array(‘hello');
$myclass->test_array(‘hello');
// Fonctionne : Affiche le tableau
// Fonctionne : Affiche le tableau
$myclass->test_array(array('a', 'b', 'c'));
Parcour d’un objet
Parcour d’un objet
L'itération
L'itération foreachforeach affiche toutes les variables affiche toutes les variables visiblesvisibles disponibles. disponibles. <?php <?php class MyClass class MyClass { {
public $var1 = 'valeur 1';
public $var1 = 'valeur 1';
public $var2 = 'valeur 2';
public $var2 = 'valeur 2';
protected $protected = 'variable protégée';
protected $protected = 'variable protégée';
private $private = 'variable privée';
private $private = 'variable privée';
function iterateVisible() {
function iterateVisible() {
echo "MyClass::iterateVisible:\n";
echo "MyClass::iterateVisible:\n";
foreach($this as $key => $value) {
foreach($this as $key => $value) {
print "$key => $value\n";
print "$key => $value\n";
} } } } } }
Parcour d’un objet
Parcour d’un objet
$class = new MyClass();$class = new MyClass();
$class->iterateVisible(); $class->iterateVisible(); Affichera : Affichera : MyClass::iterateVisible: MyClass::iterateVisible: var1 => valeur 1 var1 => valeur 1 var2 => valeur 2 var2 => valeur 2
protected => variable protégée
protected => variable protégée
private => variable privée
Parcour d’un objet
Parcour d’un objet
$class = new MyClass();$class = new MyClass();
foreach($class as $key => $value) {
foreach($class as $key => $value) {
print "$key => $value\n";
print "$key => $value\n";
} } Affichera : Affichera : var1 => valeur 1 var1 => valeur 1 var2 => valeur 2 var2 => valeur 2
Iterator
Iterator
Vous pouvez implémenter l'interface interne de PHP
Vous pouvez implémenter l'interface interne de PHP IteratorIterator. Ceci . Ceci permet de déterminer comment l'objet doit être parcouru.
permet de déterminer comment l'objet doit être parcouru.
Interface Iterator
Interface Iterator
/* Methods */
/* Methods */
abstract public mixed
abstract public mixed currentcurrent ( void ) ( void ) abstract public scalar
abstract public scalar keykey ( void ) ( void ) abstract public void
abstract public void nextnext ( void ) ( void ) abstract public void
abstract public void rewindrewind ( void ) ( void ) abstract public boolean
abstract public boolean validvalid ( void ) ( void )
Iterator
Iterator
<?php <?php classclass MyIterator MyIterator implements implements Iterator Iterator {
{
private $var = array();
private $var = array();
public function __construct($array)
public function __construct($array)
{ { if (is_array($array)) { if (is_array($array)) { $this->var = $array; $this->var = $array; } } } }
public function rewind()
public function rewind()
{ { echo "rembobinage\n"; echo "rembobinage\n"; reset($this->var); reset($this->var); } }
Exemple
Exemple
public function current()public function current()
{
{
$var = current($this->var);
$var = current($this->var);
echo "actuel : $var\n";
echo "actuel : $var\n";
return $var;
return $var;
}
}
public function key()
public function key()
{ { $var = key($this->var); $var = key($this->var); echo "clé : $var\n"; echo "clé : $var\n"; return $var; return $var; } } …
…. // on redefinie les autres méthodes de Iterator. // on redefinie les autres méthodes de Iterator }
Exemple
Exemple
$values = array(1,2,3);
$values = array(1,2,3);
$it = new MyIterator($values);
$it = new MyIterator($values);
foreach ($it as $a => $b) { foreach ($it as $a => $b) { print "$a: $b\n"; print "$a: $b\n"; } } Affichera : Affichera : actuel : 1 actuel : 1 clé : 0 clé : 0 … … actuel : 2 actuel : 2 clé : 1 clé : 1 … …
Iterator
Iterator
Pour pas redéfinir toutes les fonctions
Pour pas redéfinir toutes les fonctions
Iterator
Iterator
, on peut
, on peut
implementer l'interface PHP
implementer l'interface PHP
IteratorAggregate
IteratorAggregate
.
.
class MyData implements IteratorAggregate
class MyData implements IteratorAggregate
{
{
private $items = array();
private $items = array();
// Définition requise de l'interface IteratorAggregate
// Définition requise de l'interface IteratorAggregate
public function getIterator() {
public function getIterator() {
return new MyIterator($this->items);
return new MyIterator($this->items);
}
}
}
Deux librairies Php
Deux librairies Php
Librairie FPDF : pour générer des
Librairie FPDF : pour générer des
documents PDF
documents PDF
(www.fpdf.org)
(www.fpdf.org)
Librairie graphique JPgraph : pour
Librairie graphique JPgraph : pour
générer des graphes relativement
générer des graphes relativement
complexes (jpgraph.net)
FPDF
FPDF
Se compose :
Se compose :
d’un fichier de classe fpdf.php (qu’il
d’un fichier de classe fpdf.php (qu’il
faudra inclure dans votre script)
faudra inclure dans votre script)
et des fichiers de définition des polices.
et des fichiers de définition des polices.
La première étape consiste à créer un
La première étape consiste à créer un
objet FPDF.
Objet FPDF
Objet FPDF
Un objet dépend de trois paramètres :
Un objet dépend de trois paramètres :
L’orientation de la page (P pour portrait
L’orientation de la page (P pour portrait
ou L pour landscape)
ou L pour landscape)
L’unité de mesure (mm, cm, in, pt)
L’unité de mesure (mm, cm, in, pt)
Format de la page (A3, A4, …)
Exemple
Exemple
Création de l’objet et ajout d’une page
Création de l’objet et ajout d’une page
$pdf1 = new FPDF(‘P’, ‘mm’, ‘A4’) ;
$pdf1 = new FPDF(‘P’, ‘mm’, ‘A4’) ;
$pdf = new FPDF();
$pdf = new FPDF();
$pdf -> AddPage();
$pdf -> AddPage();
Choix de la police
Choix de la police
Méthode SetFont() avec comme paramètres :
Méthode SetFont() avec comme paramètres :
Le type de police (Arial, Times, …)
Le type de police (Arial, Times, …)
Le style de police (normal, B gras, I italique, …)
Le style de police (normal, B gras, I italique, …)
La taille donnée en points
La taille donnée en points
Exemple
Exemple
$pdf->SetFont(‘Arial’, ‘B’, 16)
L’impression
L’impression
Méthode Cell() avec comme paramètres :
Méthode Cell() avec comme paramètres :
La longueur et la largeur de la cellule
La longueur et la largeur de la cellule
Le texte
Le texte
L’encadrement (1 ou 0) (optionnel)
L’encadrement (1 ou 0) (optionnel)
Le retour a` la ligne (1 ou 0) (optionnel)
Le retour a` la ligne (1 ou 0) (optionnel)
Le positionnement (C centre, L gauche, R droite) (optionnel)
Le positionnement (C centre, L gauche, R droite) (optionnel)
Exemple
Exemple
$pdf -> Cell(150, 10, ‘mon texte’, 1, 0, ’C’)
Affichage
Affichage
Methode Output()
Methode Output()
Sans paramètre : l’affichage se fait à
Sans paramètre : l’affichage se fait à
l’écran
l’écran
Avec un nom de fichier en paramètre :
Avec un nom de fichier en paramètre :
sauvegarde du document dans le
sauvegarde du document dans le
fichier
Autres méthodes
Autres méthodes
AddLink(), SetLink() : ancre interne au document
AddLink(), SetLink() : ancre interne au document
Image(nom, coord_x, coord_y, [largeur, hauteur,
Image(nom, coord_x, coord_y, [largeur, hauteur,
type, link])
type, link])
MultiCell(largeur, hauteur, text, [bordure, align,
MultiCell(largeur, hauteur, text, [bordure, align,
couleur] )
couleur] )
PageNo() : numero de la page courante
PageNo() : numero de la page courante
SetDrawColor(r,g,b), SetFillColor(r,g,b),
SetDrawColor(r,g,b), SetFillColor(r,g,b),
SetTextColor(r,g,b)
Héritage
Héritage
On peut définir un document plus complexe en utilisant le
On peut définir un document plus complexe en utilisant le
mécanisme d’héritage entre classes
mécanisme d’héritage entre classes
Exemple :
Exemple :
Class Pdf extends FPDF {
Class Pdf extends FPDF {
Var $titre;
Var $titre;
…
…
Function Header { }
Function Header { }
Function Footer { }
Function Footer { }
…
…
}
}
JPGraph
JPGraph
Librairie orientée objet libre
Librairie orientée objet libre
Permet de créer des graphiques
Permet de créer des graphiques
complexes avec un minimum de code
complexes avec un minimum de code
Elle s’appuie sur le module graphique de
Elle s’appuie sur le module graphique de
Php GD
JPGraph
JPGraph
Différents types de graphics : (diagrammes en
Différents types de graphics : (diagrammes en
lignes, barres, ronds) grâce aux librairies
lignes, barres, ronds) grâce aux librairies
jpgraph_line, jpgraph_bar, jpgraph_pie …
jpgraph_line, jpgraph_bar, jpgraph_pie …
Support de formats gif, jpeg, png.
Support de formats gif, jpeg, png.
Les images générées seront incluses dans le
Les images générées seront incluses dans le
document html dans une balise <IMG src =
document html dans une balise <IMG src =
“image.php”/> ou` image.php est le code
“image.php”/> ou` image.php est le code
generateur
JPGraph
JPGraph
Création de l’objet graphe avec sa longueur et
Création de l’objet graphe avec sa longueur et
hauteur
hauteur
Exemple :
Exemple :
$graph = new Graph(300, 200)
$graph = new Graph(300, 200)
Calcul du graphique
Calcul du graphique
Affichage avec la méthode Stroke()
Affichage avec la méthode Stroke()
Pour pouvoir l’afficher il faudra deux fichiers : le
Pour pouvoir l’afficher il faudra deux fichiers : le
script générant le graphe et le fichier html (ou php)
script générant le graphe et le fichier html (ou php)
contenant la balise <IMG… />
Exemple
Exemple
Diagramme de lignes
Exemple
Exemple
Diagramme de barres
Exemple
Exemple
Diagramme “camembert”
Les extensions PhP
Les extensions PhP
PEAR : Php Extension and Application
PEAR : Php Extension and Application
Repository
Repository
http://pear.php.net
http://pear.php.net
PECL : Php Extension Community
PECL : Php Extension Community
Library
Library
http://pecl.php.net
Pear
Pear
PEARPEAR (pour PHP Extension and Application Repository (pour PHP Extension and Application Repository) est une ) est une collection de
collection de bibliothèques PHP. C'est aussi une application qui C'est aussi une application qui permet de gérer les bibliothèques (installer ou mettre à jour une
permet de gérer les bibliothèques (installer ou mettre à jour une
bibliothèque).
bibliothèque).
Pear est composé d’un ensemble de packages en accès librePear est composé d’un ensemble de packages en accès libre
Les packages sont construits à partir des fonctions Php standard et Les packages sont construits à partir des fonctions Php standard et souvent écrits en style orienté objets
souvent écrits en style orienté objets
Ils peuvent être inclus dans les scripts Php avec include() ou Ils peuvent être inclus dans les scripts Php avec include() ou require() comme n’importe quel autre fonction ou classe Php
Pear
Pear
Ce dépôt propose des bibliothèques pour tous les besoins courants des applications web.
Exemple de packages :
DB – connexion à une base de donnée HTTP – manipulation du protocol http
Mail – interaction avec Pop, Imap et Smtp
Calendar – fonctions et objets concernant le calendrier Archive_Zip – interaction avec des fichiers compactés …