Sie sind auf Seite 1von 38

22/04/2014

PHP5 CHAPITRE 1 :
PROGRAMMATION ORIENTE
OBJET

I. Classe et instance
Les oprations de base pour lutilisation des objets
sont :
la cration dune classe et la dfinition de ses
proprits et des mthodes qui vont permettre aux
objets crs partir de la classe dagir sur leurs
proprits ou de communiquer avec leur
environnement.
Vient ensuite la cration des objets proprement dits
en tant quinstances de la classe de base.

22/04/2014

I.1. Cration dune classe

Etape 1 :
Dclarez

la classe laide du mot-cl class suivi du


nom que vous souhaitez lui attribuer.

Etape 2.
Ouvrez

un bloc de code laide dune accolade


ouvrante contenant lintgralit de la dfinition de la
classe.

Etape 3.

Dclarez les variables propres de la classe avec les mmes


rgles de nommage et le caractre $ obligatoire.
Chaque variable doit tre prcde dun modificateur daccs
prcisant les possibilits daccs sa valeur. Dans un premier
temps, faites prcder chaque variable du mot-cl public.
Les variables peuvent tre initialises avec des valeurs de
nimporte quel type reconnu par PHP.
Une variable peut tre utilise comme un tableau cr laide
de la fonction array(). Lutilisation dautres fonctions PHP ou
dexpressions variables est en revanche interdite pour affecter
une valeur une variable.
Le nombre de variables dclares dans une classe nest pas
limit.

22/04/2014

Etape 4.
Dclarez

les fonctions propres de la classe laide du


mot-cl function, prcd, comme les variables, dun
spcificateur daccs (par dfaut le mot-cl public).
Le nom de la fonction ne doit pas commencer par deux
caractres de soulignement (__), cette notation tant
rserve certaines fonctions particulires de PHP 5.

Etape 5.
Terminez

le bloc de code de la classe par une accolade


fermante.

Syntaxe

class ma_classe
{
//Dfinition d'une constante
const lang="PHP 5";
//Dfinition des variables de la
classe
public $prop1;
public $prop2 ="valeur";
public $prop3 =
array("valeur0","valeur1");
//Initialisation interdite avec une
fonction PHP
//public $prop4= date(" d : m :
Y"); Provoque une erreur fatale

//Dfinition d'une fonction de la


classe
public function
ma_fonction($param1,$param
N)
{
//Corps de la fonction
}
}
//fin de la classe
?>

22/04/2014

Exemple 1 : Cration dune classe


action

<?php
class action
{
//Constante
const PARIS="Palais Brognard";
//variables propres de la classe
public $nom;
public $cours;
public $bourse="bourse de Paris ";

//fonction propre de la classe

public function info()

echo "Informations en date du ",date("d/m/Y H:i:s"),"<br>";

$now=getdate();

$heure= $now["hours"];

$jour= $now["wday"];

22/04/2014

echo "<h3>Horaires des cotations</h3>";


if(($heure>=9 && $heure <=17)&& ($jour!=0 && $jour!=6))
{ echo "La Bourse de Paris est ouverte <br>"; }
else
{ echo "La Bourse de Paris est ferme <br>"; }
if(($heure>=16 && $heure <=23)&& ($jour!=0 && $jour!=6) )
{ echo "La Bourse de New York est ouverte <hr>"; }
else
{ echo "La Bourse de New York est ferme <hr>"; }
}
}
?>

Exemple 2. Utilisation de la classe


action

<?php
require("objet2.php");
echo "Constante PARIS =",PARIS,"<br />";
echo "Nom = ",$nom,"<br />";
echo "Cours= ",$cours,"<br />";
echo "Bourse= ",$bourse,"<br />";
//info(); //L'appel de info()Provoque une erreur si vous
dcommentez la ligne
action::info();//fonctionne
echo "Constante PARIS =",action::PARIS,"<br />";
?>

22/04/2014

Rsultat

Exemple 3. Cration et utilisation


dobjets

<?php
require("objet2.php");
//Cration d'une action
$action1= new action();
//Affectation de deux proprits
$action1>nom = "Mortendi";
$action1>cours = 15.15;
//Utilisation des proprits
echo "<b>L'action $action1>nom cote la $action1>bourse
vaut $action1>cours&euro;</b><hr>";
//Appel d'une mthode
$action1>info();

22/04/2014

Exemple 3. Cration et utilisation


dobjets (suite)

echo "La structure de l'objet \$action1 est : <br>";


//var_dump() affiche le nom, le type et la valeur dune proprit
var_dump($action1);
// Lire lensemble des proprits de lobjet $action1 laide
dune boucle foreach
echo "<h4>Descriptif de l'action</h4>";
foreach($action1 as $prop=>$valeur)
{ echo "$prop = $valeur <br />"; }
//Vrifier si $action1 est une instance de la classe action
if($action1 instanceof action) echo "<hr />L'objet \$action1 est
du type action";
?>

22/04/2014

I.3. Accs aux variables de la classe

Pour accder une constante de classe dans le corps dune fonction,


utilisez la syntaxe suivante :
self::maconstante
ou encore :
nomclasse::maconstante
Pour quune mthode accde aux variables dclares dans la classe,
elle doit y faire appel laide de la syntaxe suivante :
$this>mavar
la pseudo-variable $this fait rfrence lobjet en cours, ce qui
permet dutiliser la variable $mavar dans la mthode.
La mthode info() de votre classe action peut maintenant tre
enrichie et avoir comme fonctionnalit supplmentaire dafficher
toutes les caractristiques dun objet action.

Vous pouvez remplacer la ligne de code :


echo "<b>L'action $action1>nom cote la bourse de $action1
>bourse vaut $action1>cours _</b><hr>";
de lexemple 3 par le code suivant, qui fera partie du corps de la
fonction info() :
if(isset($this>nom) && isset($this>cours))
{
echo "<b>L'action $this>nom cote la bourse de {$this>bourse[0]}
vaut $this>cours &euro;</b><br />";
}
La vrification de lexistence des variables permet de bloquer
laffichage dans le cas o aucun objet na t cr, sans pour autant
empcher lappel de la fonction info().

22/04/2014

Cet accs aux variables de la classe est aussi


valable si lune de ces variables est un tableau.
Pour accder la valeur dun des lments du
tableau, vous crirez :
$this>montab[1]
si la variable $montab a t dclare dans la
classe avec la fonction array() selon le modle :
public $montab = array("valeur1","valeur2");

Exemple 4. Utilisation des variables


propres par une mthode

Lexemple 4 permet de modifier la classe action qui dfinit


deux constantes utilises ensuite par la mthode info(). Vous
y retrouvez les mmes variables $nom, $cours et $bourse,
qui est un tableau.
La mthode info() utilise la variable globale $client, qui sera
dfinie dans le script crant un objet de type action, ainsi
que le tableau superglobal $_SERVER pour lire le nom du
serveur.
La lecture des lments du tableau $bourse permet
laffichage des horaires douverture des bourses. En cas de
cration dun objet et donc de dfinition des valeurs de ses
proprits nom et cours, la fonction vous permet dafficher
les informations sur laction cre.

22/04/2014

<?php
class action
{
//Dfinition d'une constante
const PARIS="Palais Brognard";
const NEWYORK="Wall Street";
//Variables propres de la classe
public $nom ;
public $cours;
public $bourse=array("Paris ","9h00","18h00");

//fonctions propres de la classe


function info()
{
global $client;
//Utilisation de variables globales et d'un tableau
superglobal
echo "<h2> Bonjour $client, vous tes sur le serveur: ",
$_SERVER["HTTP_HOST"],"</h2>";
echo "<h3>Informations en date du ",date("d/m/Y
H:i:s"),"</h3>";
echo "<h3>Bourse de {$this>bourse[0]} Cotations de
{$this>bourse[1]} {$this>bourse[2]} </h3>";

10

22/04/2014

//Informations sur les horaires d'ouverture


$now=getdate();
$heure= $now["hours"];
$jour= $now["wday"];
echo "<hr />";

echo "<h3>Heures des cotations</h3>";


if(($heure>=9 && $heure <=17)&& ($jour!=0 &&
$jour!=6))
{ echo "La Bourse de Paris ( ", self:: PARIS," ) est
ouverte<br>"; }
else
{ echo "La Bourse de Paris ( ", self:: PARIS," ) est
ferme <br>"; }

11

22/04/2014

if(($heure>=16 && $heure <=23)&& ($jour!=0 &&


$jour!=6) )
{ echo "La Bourse de New York ( ", self:: NEWYORK,"
) est ouverte<hr>"; }
else
{echo "La Bourse de New York ( ", self:: NEWYORK,"
) est ferme <hr>"; }

//Affichage du cours
if(isset($this>nom) && isset($this>cours))
{
echo "<b>L'action $this>nom cote la bourse de
{$this>bourse[0]} vaut $this>cours
&euro;</b><br />";
}
}
}
?>

12

22/04/2014

Exemple 5. Cration dun objet action

Lexemple 5 utilise cette classe pour crer des


objets aprs linclusion du fichier objet5.php.
La variable $client est initialise et sera utilise par
la mthode info().
Aprs la cration dun objet action puis la dfinition
de ses proprits, lappel de la mthode info() de
lobjet affiche lensemble des informations sur
laction cre et louverture de la Bourse.

<?php
require('objet5.php');
$client="Geelsen";
$mortendi = new action();
$mortendi>nom ="Mortendi";
$mortendi>cours="12.76";
$mortendi>info();
?>

13

22/04/2014

I.4. Les modificateurs daccessibilit

Accessibilit des proprits


Il existe trois options daccessibilit, qui sutilisent en
prfixant le nom de la variable de la classe. Ces options
sont les suivantes :
public. Permet laccs universel la proprit, aussi bien
dans la classe que dans tout le script, y compris pour les
classes drives, comme vous lavez vu jusqu prsent.
protected. La proprit nest accessible que dans la classe
qui la cre et dans ses classes drives (voir la section
Hritage de ce chapitre).
private. Cest loption la plus stricte : laccs la proprit
nest possible que dans la classe et nulle part ailleurs.

14

22/04/2014

Exemple

<?php
class acces
{
//Variables propres de la classe
public $varpub ="Proprit publique";
protected $varpro="Proprit protge";
private $varpriv="Proprit prive";
function lireprop()
{
echo "Lecture publique: $this>varpub","<br />";
echo "Lecture protge: $this>varpro","<br />";
echo "Lecture prive: $this>varpriv","<hr />";
}
}

Exemple (suite)

$objet=new acces();
$objet->lireprop();
echo "<hr />";
echo $objet>varpub;
//echo $objet->varpriv; Erreur fatale
//echo $objet->varpro; Erreur fatale
echo "<hr />";
foreach(get_class_vars('acces') as $prop=>$val)
{
echo "Proprit ",$prop ," = ",$val,"<br />";
}
?>

15

22/04/2014

Accessibilit des mthodes

PHP 5 permet dsormais de dfinir des niveaux


daccessibilit pour les mthodes des objets. Vous retrouvez
les mmes modificateurs que pour les proprits :
public. La mthode est utilisable par tous les objets et
instances de la classe et de ses classes drives.
protected. La mthode est utilisable dans sa classe et dans
ses classes drives, mais par aucun objet.
private. La mthode nest utilisable que dans la classe qui la
contient, donc ni dans les classes drives, ni par aucun
objet.
Tout appel dune mthode en dehors de son champ de
visibilit provoque une erreur fatale.

Exemple 6. Accessibilit des


mthodes

<?php
class accesmeth
{
//Variables propres de la classe
private $code="Mon code priv";

16

22/04/2014

Exemple 6. Accessibilit des


mthodes

//Mthodes
//Mthode prive
private function lirepriv()
{
echo "Lire prive ",$this->code,"<br />";
}
//Mthode protge
protected function lirepro()
{
echo "Lire protge ",$this->code,"<br />";
}

Exemple 6. Accessibilit des


mthodes

//Mthode publique
public function lirepub()
{
echo "Lire publique : ",$this->code,"<br />";
$this->lirepro();
$this->lirepriv();
}
}

17

22/04/2014

Exemple 6. Accessibilit des


mthodes

//Appels des mthodes


$objet=new accesmeth();
$objet->lirepub();
//$objet->lirepro();Erreur fatale
//$objet->lirepriv();Erreur fatale
?>

I.5. Proprits et mthodes statiques

PHP 5 introduit la notion de proprit et de


mthode statique, qui permet daccder ces
lments sans quil soit besoin de crer une instance
de la classe.
Pour dclarer une proprit ou une mthode
statique, vous devez faire suivre le mot-cl
dfinissant laccessibilit du mot-cl static.

18

22/04/2014

I.5. Proprits et mthodes statiques

Comme les mthodes statiques sont utilisables sans la


cration dobjet, vous ne devez pas utiliser la pseudovariable $this pour faire rfrence une proprit de
la classe dans le corps de la mthode.
Vous devez utiliser une des syntaxes suivantes :
si la mthode est celle de la mme classe : self::$proprit
si la mthode est celle dune autre classe :
nomclasse::$proprit

Notez quil faut conserver le signe $ pour dsigner la


proprit.

I.5. Proprits et mthodes statiques

De mme, pour appeler une mthode statique de la


classe partir dune autre mthode, vous utilisez les
mmes syntaxes, avec les mmes conditions que cidessus :
self::$mthode()
nomclasse::$mthode()

19

22/04/2014

I.5. Proprits et mthodes statiques

Si vous crez un objet instance de la classe, la


proprit dclare static nest pas accessible
lobjet en crivant le code $objet>proprit.
Par contre, les mthodes statiques sont accessibles
par lobjet avec la syntaxe $objet>mthode().
Si vous modifiez la valeur dune proprit dclare
statique partir dun objet, cette modification nest
pas prise en compte par les mthodes qui utilisent
cette proprit.

Exemple 7. Proprit et mthode


statiques

<?php
class info
{
//Proprit statique
public static $bourse="Bourse de Paris";

20

22/04/2014

Exemple 7. Proprit et mthode


statiques

//Mthodes statiques

public static function getheure()

$heure=date("h : m : s");

return $heure;

public static function afficheinfo()

$texte=info::$bourse.", il est ".self::getheure();

return $texte;

Exemple 7. Proprit et mthode


statiques

echo info::$bourse,"<br />";


echo info::getheure(),"<br />";
echo info::afficheinfo(),"<hr />";

21

22/04/2014

Exemple 7. Proprit et mthode


statiques

//Cration d'un objet info


$objet=new info();
$objet->bourse="New York";
echo "\$objet->bourse : ",$objet->bourse,"<hr />";
echo "\$objet->getheure() : ",$objet->getheure(),
"<br />";
echo "\$objet->afficheinfo() : ",$objet->afficheinfo(),
"<br />";
?>

Remarque :
Lutilisation dune proprit statique dans un contexte objet
peut prsenter un danger.
En effet, dans lexemple prcdent, une nouvelle valeur est
affecte la proprit bourse.
Laffichage de cette proprit montre que cette affectation
est bien ralise.
En revanche, lappel de la mthode de lobjet qui utilise
cette proprit permet de constater que la proprit a
toujours la valeur qui a t dfinie dans la classe.
Pour pallier cet inconvnient, il faudrait ajouter la classe
une mthode spciale qui modifierait la proprit bourse

22

22/04/2014

<?php
class info
{
//Proprit statique
public static $bourse="Bourse de Paris";

//Mthodes statiques
public static function getheure()
{
$heure=date("h : m : s");
return $heure;
}
public function setbourse($val)
{
info::$bourse=$val;
}

23

22/04/2014

public static function afficheinfo()


{
$texte=info::$bourse.", il est ".self::getheure();
return $texte;
}
}

echo info::$bourse,"<br />";


echo info::getheure(),"<br />";
echo info::afficheinfo(),"<hr />";

24

22/04/2014

//Cration d'un objet info


$objet=new info();
$objet->setbourse("New York");
echo "\$objet->bourse : ",info::$bourse,"<hr />";

echo "\$objet->getheure() : ",$objet->getheure(),"<br />";

echo "\$objet->afficheinfo() : ",$objet>afficheinfo(),"<br />";


?>

I.6. Constructeur et destructeur dobjet

Dans ce qui prcde, vous avez cr des objets en


instanciant la classe action puis avez dfini les
proprits des objets ainsi crs.
Cette mthode est un peu lourde, car elle implique de
dfinir les proprits une par une.
Il existe une faon plus rapide de crer des objets et de
dfinir leurs proprits en une seule opration.
Elle consiste crer un constructeur dobjet, qui nest
rien dautre quune fonction spciale de la classe, dont
les paramtres sont les valeurs que vous voulez
attribuer aux proprits de lobjet.

25

22/04/2014

I.6. Constructeur et destructeur


dobjet

PHP 5 permet de crer des constructeurs avec la


mthode __construct(), dont la syntaxe est la suivante :

void __construct(divers $argument1,,argumentN)

Cette mthode, dite mthode magique comme


toutes celles qui commencent par deux caractres de
soulignement (__), porte le mme nom, quelle que soit
la classe, ce qui permet des mises jour sans avoir
modifier le nom du constructeur.
Elle ne retourne aucune valeur et est utilise
gnralement pour initialiser les proprits de lobjet.

Elle est appele automatiquement lors de la


cration dun objet laide du mot-cl new suivi du
nom de la classe et des paramtres du constructeur,
en utilisant la syntaxe suivante :
$mon_objet

= new nom_classe(param1,param2,.)

Vous avez cr un objet nomm $mon_objet et


initialis chacune de ses proprits avec les valeurs
des paramtres passs la fonction.

26

22/04/2014

De mme, vous avez la possibilit avec PHP 5 dutiliser


des destructeurs laide de la fonction __destruct(),
dont la syntaxe est la suivante :

void __destruct()

Elle sutilise sans paramtre car elle nest gnralement


pas appele directement et ne retourne aucune valeur.
Elle est appele automatiquement soit aprs la
destruction explicite de lobjet avec la fonction unset(),
soit aprs la fin du script et la disparition de toutes les
rfrences lobjet.

Exemple 8. La classe action munie


dun constructeur et dun destructeur

<?php
class action
{
private $propnom;
private $propcours;
protected $propbourse;

27

22/04/2014

Exemple 8. La classe action munie


dun constructeur et dun destructeur

function __construct($nom,$cours,$bourse="Paris")
{
$this->propnom=$nom;
$this->propcours=$cours;
$this->propbourse=$bourse;
}
function __destruct()
{
echo "L'action $this->propnom n'existe plus!<br />";
}
}

Exemple 8. La classe action munie


dun constructeur et dun destructeur

//Cration d'objets
$alcotel = new action("Alcotel",10.21);
$bouch = new action("Bouch",9.11,"New York");
$bim = new action("BIM",34.50,"New York");

28

22/04/2014

Exemple 8. La classe action munie


dun constructeur et dun destructeur

// Crer une rfrence lobjet $bim


$ref=&$bim;
var_dump($alcotel);
echo "<hr />";
unset($alcotel);
unset($bim);
echo "<hr /><h4> FIN du script </h4><hr />";
?>

Remarque :
La destruction explicite de lobjet Alcotel entrane
lappel du destructeur et laffichage dun message.
Par contre, la destruction explicite de lobjet $bim
ne provoque pas lappel du destructeur car il existe
encore une rfrence cet objet.
En consultant laffichage ralis par le script, vous
constatez quaprs le message de fin de script, le
destructeur est appel pour les objets $bim et
$bouch.

29

22/04/2014

I.7. Drfrencement

Lappel dune mthode dobjet se faisait selon la syntaxe


suivante :

$varobj>methode() ;

Dans le cas o la mthode applique un objet retourne


elle-mme un objet et que celui-ci possde ses propres
mthodes, PHP 5 peut pratiquer le drfrencement.
Le drfrencement permet denchaner les appels de
mthodes les uns la suite des autres.
Vous pouvez crire le code suivant :
$varobj>methode1()>methode2();

condition que methode2() soit une mthode de lobjet


obtenu par lappel de methode1().

Exemple 9. Drfrencement de
mthodes

<?php
class varchar
{
private $chaine;
function __construct($a)
{
$this->chaine= $a;
}

30

22/04/2014

Exemple 9. Drfrencement de
mthodes

function add($addch)
{
$this->chaine.=$addch;
return $this;
}
function getch()
{
return $this->chaine;
}
}

Exemple 9. Drfrencement de
mthodes

//Cration d'objet
$texte=new varchar("Apache ");
echo $texte->getch(),"<hr />";
echo $texte->add( " PHP 5 ")->getch(),"<hr />";

echo $texte->add(" MySQL ")->add("SQLite ")->getch(),"<hr />";

?>

31

22/04/2014

Exemple 11. Drivation de classe


abstraite

<?php
//Classe abstraite valeur
abstract class valeur
{
protected $nom;
protected $prix;
abstract protected function __construct() ;
abstract protected function getinfo();
}

//Classe action
class action extends valeur
{
private $bourse;
function __construct($nom,$prix,$bourse="Paris")
{
$this->nom=$nom;
$this->prix=$prix;
$this->bourse=$bourse;
}

32

22/04/2014

public function getinfo()


{
$info="<h3>Action $this->nom cote la bourse
de $this->bourse </h3>";
$info.="<h4>Le prix de $this->nom est de $this>prix </h4>";
return $info;
}
}

$action1 = new action("Alcotel",9.76);


echo $action1->getinfo();
$action2 = new action("BMI",23.75,"New York");
echo $action2->getinfo();
?>

33

22/04/2014

III. Clonage dobjet

La notion de clonage dobjet permet deffectuer


une copie exacte dun objet mais en lui affectant
une zone de mmoire diffrente de celle de lobjet
original.
Contrairement la cration dune simple copie
laide de loprateur = ou dune rfrence sur un
objet avec loprateur &, les modifications opres
sur lobjet clon ne sont pas rpercutes sur
loriginal.

Pour cloner un objet, utilisez le mot-cl clone selon la


syntaxe suivante :
$objetclone = clone $objet ;
Lobjet clon a exactement les mmes proprits et
les mmes mthodes que loriginal.
Aprs le clonage, les modifications opres sur la
variable $objet nont aucun effet sur le clone, et
rciproquement.

34

22/04/2014

Exemple 13. Copie et clonage

<?php
//Dfinition de la classe action
class action
{
public $nom;
function __construct($nom)
{
$this->nom=$nom;
}

function __destruct()
{
echo "L'action $this->nom n'existe plus!<br />";
}
}

35

22/04/2014

//Cration d'objets
$alcotel = new action("Alcotel",10.21);
$clone= clone $alcotel;
$bim=$alcotel;
$ref=&$bim;

//Modification d'une proprit


$bim->nom="BIM";
echo "\$ref->nom : ".$ref->nom ,"<BR>";
echo "\$alcotel->nom : ".$alcotel->nom ,"<BR>";
echo "\$clone->nom : ".$clone->nom ,"<hr />";

36

22/04/2014

//Affichage des caractristiques des objets


var_dump($alcotel);echo "<BR>";
var_dump($bim);echo "<BR>";
var_dump($ref);echo "<BR>";
var_dump($clone);echo "<hr>";

//Suppression des objets


unset($clone);
unset($alcotel);
unset($bim);
unset($ref);
?>

37

22/04/2014

38

Das könnte Ihnen auch gefallen