• Aucun résultat trouvé

Initiation au langage PHP-MYSQL

N/A
N/A
Protected

Academic year: 2021

Partager "Initiation au langage PHP-MYSQL"

Copied!
87
0
0

Texte intégral

(1)

   

Internet et bases de

Internet et bases de

données

données

SIL-NTI

SIL-NTI

Université de Provence

Université de Provence

(2)

   

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

(3)

   

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

(4)

   

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).

(5)

   

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();

?>

(6)

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

(7)

   

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

(8)

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"; }

} ?>

(9)

   

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';

}

(10)

   

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();

(11)

   

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) :

(12)

   

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';} }

(13)

   

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;} }

(14)

   

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;

?>

(15)

   

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).

(16)

   

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; }

(17)

   

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() { };

}

(18)

   

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

(19)

   

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. )

(20)

   

Exemple

Exemple

<?php <?php

class 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; }} }}

(21)

   

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(); ?>

(22)

   

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

(23)

   

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

(24)

   

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{ // ... }

(25)

   

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() { // ... }

}

(26)

   

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’

(27)

   

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.

(28)

   

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.

(29)

   

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

(30)

   

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

}} ?>

(31)

   

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

(32)

   

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; } } } }

(33)

   

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é');

}

(34)

   

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()); } } ?> ?>

(35)

   

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

(36)

   

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_

(37)

   

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; } }

(38)

   

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()

(39)

   

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.

(40)

   

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).

(41)

   

__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é é é

(42)

   

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;

(43)

   

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!

(44)

   

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

(45)

   

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

(46)

   

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).

(47)

   

__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.

(48)

   

__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

(49)

   

__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;

(50)

   

__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;} } } ?> ?>

(51)

   

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

(52)

   

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 •

(53)

   

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 )

(54)

   

Sérialisation

Sérialisation

Utiliser

Utiliser 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.

(55)

   

__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) .

(56)

   

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(); }}

(57)

   

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(); } } } ?> ?>

(58)

   

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!’

(59)

   

Exemple

Exemple

class MaClasse

class 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'));

(60)

   

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";

} } } } } }

(61)

   

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

(62)

   

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

(63)

   

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 )

(64)

   

Iterator

Iterator

<?php <?php class

class 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); } }

(65)

   

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 }

(66)

   

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 … …

(67)

   

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);

}

}

}

(68)

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)

(69)

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.

(70)

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, …)

(71)

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();

(72)

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)

(73)

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’)

(74)

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

(75)

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)

(76)

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 { }

}

}

(77)

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

(78)

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

(79)

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… />

(80)

Exemple

Exemple

Diagramme de lignes

(81)

Exemple

Exemple

Diagramme de barres

(82)

Exemple

Exemple

Diagramme “camembert”

(83)

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

(84)

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

(85)

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  …

Figure

Diagramme de lignesDiagramme de lignes
Diagramme de barresDiagramme de barres

Références

Documents relatifs

Plutôt que de décider a priori de sortir de l'euro pour revenir à la drachme, la peseta ou le franc, ils seront bien inspirés de prendre des mesures unilatérales pour montrer

The parallel Slice heuristics extend the parallel Opti- mistic++ strategy. The key idea is to schedule a whole slice rather than individual test runs in the global sched- uler.

14 Les travaux consacrés au décrochage scolaire, et notamment le rapport « Coup de pousse à la réussite, des pistes d’actions pour la persévérance scolaire et la

mande de paiement de subside (formulaire 2, en: 3 exemplaires) et établira une facture égale- ment en 3 exemplaires, avec indication du N° de la demande, le nombre et le genre des

Quand les capacités sont trop différentes pour partager une même activité, d’autres scénarios apparaissent : l’élève en grande difficulté est accueilli dans une autre classe

Quand les capacités sont trop différentes pour partager une même activité, d’autres scénarios apparaissent : l’élève en grande difficulté est accueilli dans une autre

 Tu peux refaire plusieurs fois jusqu’à ce que le dessin soit comme le modèle?. Comment faire

 Tu peux refaire plusieurs fois jusqu’à ce que le dessin soit comme le modèle?. Comment faire