Cours ⇒ Cour PHP facebook twitter youtube

La programmation objet ⇒ & Classe et instance



1 Classe et instance

2 l’encapsulation

3 visibilité des attributs et des méthodes

4 Ajouter d’une méthode dans la classe

5 Utilisation de la classe

6 Mettre à jour et lire les attributs de l’instance

7 Passage en paramètre de type objet

8 le constructeur

9 le destructeur

10 Exercice

11 Les constante de la classe

12 les attributs et méthodes statiques

 

2 -1 La classe

Une classe sert à fabriquer des objets à  partir d’un modèle. Ces objets ont leur propre attribut et certaines méthodes.

Par exemple :

Crée un exemplaire d’animaux, à partir de la classe Animal, on va créer une instance de cette classe .créé un objet d’un certaines type (Animal) avec certaines attributs(couleur, poids).

Création d’une classe :

< ?php
Class Animal  //mot clé class suivi du nom de la classe
{
//declaration des atributs et des méthodes
}
?>

Remarque : il est conseillé de mettre une classe par fichier php ayant le même nom que la classe

2-2 l’encapsulation

Tous les attributs doivent être cachés aux autres personnes utilisant nous classes.

Si vous travaillez en équipe et que vous avez créé la classe Animal, les autres développeurs ne doivent pas pouvoir changer directement les attributs de la classe ,donc il est conseillé de déclarer privées .

La classe Animal a des méthodes pour lire ou écrire dans ces attributs. C’est le principe de l’encapsulation.

Cela permet d’avoir un code plus protégé lorsque vous travaillez en équipe.

2-3 visibilité des attributs et des méthodes

Il existe trois types de mot clé pour définire la visibilité d’un attribut ou méthode.

  1. private :seul le code de votre classe peut voir et accéder à cet attribut ou méthode.
  2. public : toutes les classes peuvent voir et accéder à cette attribut ou méthode.
  3. protected : seul le code de votre classe et des sous-classes peut voir et accéder à cet attribut ou méthode.
< ?php
   Class Animal
{

//declaration des attributs

 privat $couleur= "noir" ;
 privat $poids=10 ;
//ajouter des méthodes
  public function manger()
            {
          //méthode pouvant accéder aux propriétés couleur, poids
            }
public function se_deplacer()
            {
          //méthode pouvant accéder aux propriétés couleur, poids
            }
}
?>

2-4 Ajouter d’une méthode dans la classe

Pour accéder aux attribut de la classe, il faut utiliser la pseudo variable $this représentant l’objet dans lequel vous écriviez.

Pour accéder à l’attribut ou la méthode de l’objet, il faut utiliser l’opérateur  ->

Exemple :

< ?php
   Class Animal
{
//déclaration des attributs
 privat $couleur= "noir" ;
 privat $poids=10 ;
//ajouter des méthodes
  public function manger()
            {
          //méthode pouvant accéder aux propriétés couleur, poids
            }
public function se_deplacer()
            {
          //méthode pouvant accéder aux propriétés couleur, poids
            }
 Public function ajouter_un_kilo()
   {
  $tihis -> poids=$this->poids+1 ;
}
}
?>

Remarque:

Les propriétés sont déclarer avec le symbole $ mais sont appeler avec $this sans symbole.

2-5 Utilisation de la classe

Il faut crée un fichier PHP  Animal_class.php qui contenant le code php et pour utiliser la class crée  il faut l’inclure dans la page ou vous souhaitez l’appeler

< ?php
Include(‘Animal_class.php’);
?>

Maintenant la class est charger dans la page alors on va créer un objet ayant modèle la classe Animal

< ?php
//chargement de la classe
Include(‘Animal_class.php’);
//Cree UN objet (instance)
$chien=new Animal();
?>

Alors la variable $chien est une instance de la classe Animal avec les attributs couleur, poids et méthode manger se_deplacer,ajouter_un_kilo propres à lui-même.

2-6 Mettre à jour et lire les attributs de l’instance

Le principe de l’encapsulation veut que tous les attributs doivent être privés.

Il faut donc créer des méthodes publiques permettant de lire ou d’écrire dans ces attributs depuis une autre page PHP.

Ces méthodes sont appelées des accesseurs.

Leurs nom sont généralement précédés du préfixe

  1. get  pour lire la valeur de l’attribut.
  2. set pour écrire la valeur de l’attribut.

La classe Animal avec les accesseur est :

//déclaration des attributs
 private $couleur= "noir" ;
 private $poids=10 ;
//accesseurs

public function getCouleu()
{
Return $this ->couleur ;
//retourne la couleur
}
Public function setCouleur($couleur)
{
                $this->couleur=$couleur;
}
public function getPoids()
{
                return $this->poids; //reteoune dz poids
                }

public function setPoids($poids)
{
                $this->poids=$poids;
                }
//une méthode

public function Ajouter_un_kilo()
{
                $this->poids=$this->poids +1;
                }

}

$chein= new Animal;
echo "le poids de chien est :".$chein->getPoids();
$chein->Ajouter_un_kilo();
echo "
 noveaux le poids de chien est :".$chein->getPoids();
$chein->setPoids(15);
echo "
 noveaux le poids de chien est :".$chein->getPoids();
?>

le poids de chien est :10
noveaux le poids de chien est :11
noveaux le poids de chien est :1

Exemple :

Crée un chat gris de 5kg et un chien blanc 20kg ?

//déclaration des attributs
 private $couleur= "noir" ;
 private $poids=10 ;
//accesseurs
public function getCouleur()
{
Return $this ->couleur ;
//retourne la couleur
}
Public function setCouleur($couleur)
{
                $this->couleur=$couleur;
}
public function getPoids()
{
                return $this->poids; //reteoune dz poids
               }

public function setPoids($poids)
{
               $this->poids=$poids;

                }
//une méthode

public function Ajouter_un_kilo()
{
                $this->poids=$this->poids +1;
                }
}
$chien= new Animal;
$chat= new Animal;
// on va mettre a jour le poids de chien
$chien->setPoids(20);
// on va mettre a jour le poids de chat
$chat->setPoids(5);
//mettre a jour la coleur de chien et de chat
$chien->setCouleur('blanc');
$chat->setCouleur('gris ');
//afficher les donneés
echo"le poidsde chien".$chien->getPoids()."kg 
";
echo" la coleur de chien est: ".$chien->getCouleur()."
";
echo"le poidsde chat est: ".$chat->getPoids()."kg
";
echo" la coleur de chat  est: " .$chat->getCouleur()."
";
?>

Le poids de chien20kg 
le colleur de chien est: blanc
le poids de chat est: 5kg
le colleur de chat est: gris 

2-7 Passage en paramètre de type objet

 

Les méthodes sont comme des fonctions, elles peuvent prendre des paramètres de type différent (Integer,String..)Et même de type objet.

$chat ,$chien sont des objets de type Animal.

Ils peuvent être passés en paramètre d’une méthode à condition que celle-ci accepte ce type d’objet.

Pour tester cet exemple, il faut changer la méthode manger() de la classe Animal.

Elle devient manger_animal(Animal $animal_mange) et prend en paramétre un objet de type Animal.

claas2.php est :

//déclaration des attributs
 private $couleur= "noir" ;
 private $poids=10 ;
//accesseurs
public function getCouleur()
{
Return $this ->couleur ;
//retourne la couleur
}
Public function setCouleur($couleur)
{
                $this->couleur=$couleur;
}
public function getPoids()
{
                return $this->poids; //reteoune dz poids
                }
public function setPoids($poids)
{
               $this->poids=$poids;

                }
//une méthode
public function manger_animal(Animal $animal_mange)

{
                //l'animal mangeant augment son poids d'autant que celui de l'animal mangé
                $this->poids=$this->poids+$animal_mange->poids;
                //l'animalze mangé et sa colleur sont remise a zero
                $animal_mange->poids=0;
                $animal_mange->couleur="";
                }
public function Ajouter_un_kilo()
{
                $this->poids=$this->poids +1;
                }
}
?>

Pour tester cette methode

Page1.php est :

//chargement de la classe
require_once('claas2.php');
//cree un chat
$chat= new Animal;
// mettre a jour la colleur et le poid de chat
$chat->setCouleur('noir');
$chat->setPoids(10);//le poids
//cree un poisson
$poisson =new Animal;
//mettre a jour les données de poisson
$poisson->setCouleur('rouge');
$poisson->setPoids(1);//le poisson pase 1kg
// lire les données qui on a entrer
echo "L a colleur de chat est: ".$chat->getCouleur()." sont poids est :".$chat->getPoids()."Kg 
";
echo" La colleur de poisson est : ".$poisson->getCouleur()." sont poids est : ".$poisson->getPoids()." Kg 
";
//le chat mange le poisson
$chat->manger_animal($poisson);
//lire le poids du chat
echo "le poids de chat après repas est de :".$chat->getPoids()." Kg 
";
echo"Le poids de poisson est: ".$poisson->getPoids()."Kg 
";
echo" Le colleur de poisson est : ".$poisson->getCouleur()."
";
?>

affichert:

L a colleur de chat est: noir sont poids est :10Kg 
La colleur de poisson est : rouge sont poids est : 1 Kg 
le poids de chat après repas est de :11 Kg 
Le poids de poisson est: 0Kg 
Le colleur de poisson est : 

 

L’objet $chat appelle la méthode manger_animal($poisson) en passant en paramètre l’objet $poisson de type Animal. C’est –à-dire que l’objet $poisson avec ses attributs et ses méthodes sont passées en paramétré. Celapermet de passer plusieurs valeurs en paramétré avec un seul paramètre.

La méthode manger_animal(Animal $animal_mange)accepte uniquement un paramétre de type Animal.donc il est pas possible d’appeler la méthode de cette façon :

$chat->manger_animal(‘souris’) ;

Ou

$chat->manger_animal(2) ;

Car les types de ‘souris’(String) et 2 (Integer) ne sont pas de type Animal .  

2-8 le constructeur

Le constructeur sert à construire un objet du type classe. Lorsque vous écrivez new Animal(), cela appelle le constructeur par défaut de la classe Animal.il est possible de créer votre propre constructeur et ainsi de pouvoir lui passer en paramètre la valeur des attributs que vous souhaitez affectez  à votre objet .

Le constructeur est toujours nommé _construct et ne possédé pas de return.

Pour cette exemple ajouter un constructeur  prenant en paramètre le poids et la couleur ,

Ajouter à la classe

 

public function __construct ($couleur, $poids)

//le constructeur demande 2 paramettres


{
                echo"Appel du constructeur.
";
                $this->couleur=$couleur; //initialisation de la couleur
                $this->poids=$poids ;//initialisation de poids              
                }

Donc la classe est :

//déclaration des attributs
 private $couleur= "noir" ;
 private $poids=10 ;
//accesseurs
public function getCouleur()
{
Return $this ->couleur ;
//retourne la couleur
}
Public function setCouleur($couleur)
{
                $this->couleur=$couleur;
}
public function getPoids()
{
                return $this->poids; //reteoune dz poids
                }

public function setPoids($poids)
{
                $this->poids=$poids;
                }

//une méthode

public function manger_animal(Animal $animal_mange)
{
                //l'animal mangeant augment son poids d'autant que celui de l'animal mangé
                $this->poids=$this->poids+$animal_mange->poids;
                //l'animalze mangé et sa colleur sont remise a zero
                $animal_mange->poids=0;
                $animal_mange->couleur="";
                }
public function Ajouter_un_kilo()
{
                $this->poids=$this->poids +1;
                }
public function __construct ($couleur, $poids)
//le constructeur demande 2 paramettres
{
                echo"Appel du constructeur.
";
                $this->couleur=$couleur; //initialisation de la couleur
                $this->poids=$poids ;//initialisation de poids
                }
}
?>

Page2.php

getCouleur()."
";
echo" le poids de chien est : ".$chien->getPoids()." Kg 
";
?>

Afficher :

Appel du constructeur.
la couleur de chien est : beige
le poids de chien est : 7 Kg 

Remarque

Dans le PHP il n’est pas possible de déclarer deux constructeurs dans la même classe.

2-9 le destructeur

Le déstruteur sert à détruire l’objet crée pour libére de la mémoire, il est appelé à la fin de script.

Pour détruire un objet on utilise la fonction unset().cette fonction prend en paramétré l’objet à détruire.

Exemple pour détrure l’objet $chien

< ?php
//détruire $chien
Unset($chien) ;
//on peut utiliser le destructeur par défaut __destruct()
Function __destruct(=
{
Echo’ appeler destructeur de l’objet’ ;}
?>

Exercice

Creé deux poissons

Poisson1 gris, 10kg

Poisson2 rouge, 7kg

Afficher leurs poids puis le poisson1 mange le poisson2.

Réafficher leur poids

Solution


class Animal 
{
//déclaration des attributs et méthode de la classe
private $poids=30;
private $couleur="blanc";
//accesseure
public  function getcouleur()                         {                                                                                                            return $this->couleur; //retouner la couleur

 }        
public     function setcouleur($couleur)
{                                                                                            $this->couleur=$couleur;//modifier la couleur
}        

public     function getpoids()
{
return $this->poids;//retourner le poids
}
public    function setpoids($poids)
{                                                                                              $this->poids=$poids;//modifier le poids
                                                                                              }                                                                            
//les méthodes
public function mange_animal( Animal $manger)
{
 //$mangerc'est l'animale mangé
$this->poids=$this->poids +$manger->poids;
$manger->poids=0;
$manger->couleur="";
 }
// consture un constructeu
public function __construct($couleur, $poids)
{
$this->couleur=$couleur;
$this->poids=$poids;
}                             
}//fin de la classe

//crée le poisson1 et poisson2
$poisson1=new Animal('gris', 10);
$poisson2= new Animal('rouge', 7);
//afficher les données des poissons
echo"Poisson 1 sont poids est :" .$poisson1->getpoids()." kg 
";
echo"Poisson 1 sa couler est :" .$poisson1->getcouleur()."
";
echo"Poisson 2 sont poids est :" .$poisson2->getpoids()." kg 
";
echo"Poisson 2 sa couler est :" .$poisson2->getcouleur()."
";
//afficher les poison apris repas
$poisson1->mange_animal($poisson2);
echo"Poisson 1 sont poids est :" .$poisson1->getpoids()." kg 
";
echo"Poisson 2 sont poids est :" .$poisson2->getpoids()." kg 
";
echo"Poisson 2 sa couler est :" .$poisson2->getcouleur()."
";
?>



Poisson 1 sont poids est :10 kg
Poisson 1 sa couler est :gris
Poisson 2 sont poids est :7 kg
Poisson 2 sa couler est :rouge
Poisson 1 sont poids est :17 kg
Poisson 2 sont poids est :0 kg
Poisson 2 sa couler est :

ccc

2-11 Les constante de la classe

Une constante de classe une valeur affecter à un nom et qui ne change jamais.

Exemple

Define(‘pi’ ;3.14) ;

Retour dans notre exemple animl

Si on va créer un objet $chien= new Animal(‘gris’,10) ;

Ici on ne peut pas savoir que 10 c’est le poids de chien,

Pour cela on utilise les constantes representent chacune un certain poids .

 //declaration des constantes

const Poids_leger=5 ;

const Poids_moyen=10;

const Poids_lourd=15 ;

Les constantes sont toujours en minuscule sans le symbole $ et précédé du mot clé const

Si on rajoute à notre classe

On va appeler tous sa dans une page

Et pour faire appele à cette contante depuis la page utilisation.php ,la syntaxe est

Un peu particulière .il faut mettre :: entre la classe et sa constante

include('claas2.php');

 

$poisson1= new Animal("gris" ,Animal::Poids_lourd);

$poisson2= new Animal("rouge", Animal::Poids_leger);

echo" le poids de poisson1 est; ".$poisson1->getPoids()." et sa couleur est: ".$poisson1->getCouleur()."
";

echo" le poids de poisson2 est; ".$poisson2->getPoids()." et sa couleur est: ".$poisson2->getCouleur()."
";

?>

Afficher :

le poids de poisson1 est; 15 et sa couleur est: gris
le poids de poisson2 est; 5 et sa couleur est: rouge

2-12 les attributs et méthodes statiques

  • 1-Méthode statique

La méthode statique est liée à la classe et non à l’objet .dans l’exemple de la classe Animal , une méthode statique est liée à l’Animal  et non aux chiens ;aux chat ,poisson .

Pour rendre une méthode statique il faut ajouter le mot clé static devant function

Dans notre exemple on  a une méthode se_deplacer() on va la mettre statique


public static function se_deplacer()

{
                echo"l'animale se déplace.";
                }              

 

Remarque important :

Il est impossible de mettre le mot $this dans une méthode statique car $this représente l’objet et la méthode statique liée à la classe.

Mais pour appeler un méthode statique il faut utiliser la même chose que les constantes, c’est-à-dire mettre :: entre la classe et sa méthode statique


 

Afficher : l'animale se déplace.

Il est possible de apler la méthode statique à partire d’un objet mais la méthode statique ne peut rien changer sur l’objet

Exemple


se_deplacer();
?>

Afficher : l'animale se déplace.

 

2-Attribut statique

L’attribut statique est un attribut propre à la classe  et non à l’objet c’est comme la méthode statique c’est le même principe que pour une constante sauf que l’attribut étant une variable, il est possible de changer sa valeur.

Exemple

Par exemple pour ajouter un attribut statique représentant un compteur indiquant le nombre de fois ou la classe à été instanciée :

// Déclaration de la varible statique

private static $compteur=0;

Remarque important :

Pour changer la valeur de ce compteur vous ne pouvez pas utiliser $this .le compteur est de type statique donc lié à la classe .pour faire appel à cette attribut dans la classe, il faut utiliser le mot clé self qui représente la classe.

Pour ajouter un 1 chaque fois que vous allez instancier la classe Animal donc il faut modifier le constructeur .ensuite il faut ajouter une méthode permettant de lire cet attribut privé grâce à une méthode de type public statice et de nom getcompteur()

Notre constructeur est :


public function __construct ($couleur, $poids)

//le constructeur demande 2 paramettres
{
                echo"Appel du constructeur.
";
                $this->couleur=$couleur; //initialisation de la couleur
                $this->poids=$poids ;//initialisation de poids 
                }

Modifier le constructeur

Ajoutera ligne suivant pour le compteur


self::$compteur=self::$compteur + 1;

//méthode statique retourne la valeur de compteur


public static function getcompteur()
{
                return self::$compteur;
                }

//cree un chien
$chien1= new Animal("noir" , Animal::Poids_leger);
$chien2= new Animal("blanc" ,  Animal::Poids_lourd);
$chien3= new Animal("gris" , Animal::Poids_moyen);
echo "le nombre des chiens crée est :".Animal::getcompteur();
?>

Afficher

Appel du constructeur.
Appel du constructeur.
Appel du constructeur.
le nombre des chiens crée est :3

Le fichier de la class2.php


//déclaration des attributs
 private $couleur= "noir" ;
 private $poids=10 ;
//declaration des constantes
const Poids_leger=5 ;
const Poids_moyen=10;
const Poids_lourd=15 ;
// Déclaration de la varible statique
private static $compteur=0;
//accesseurs
public function getCouleur()
{
Return $this ->couleur ;
//retourne la couleur
}
Public function setCouleur($couleur)
{
               $this->couleur=$couleur;
}
public function getPoids()
{ 
return $this->poids; //reteoune dz poids
 }
public function setPoids($poids)
{

                $this->poids=$poids;

                }
//une méthode
public function manger_animal(Animal $animal_mange)
{
//l'animal mangeant augment son poids d'autant que celui de l'animal mangé
$this->poids=$this->poids+$animal_mange->poids;
 //l'animalze mangé et sa colleur sont remise a zero
$animal_mange->poids=0;
$animal_mange->couleur="";
  }
public static function se_deplacer()
{
echo"l'animale se déplace.";
 }             
public function Ajouter_un_kilo()
{
 $this->poids=$this->poids +1;
 }
public function __construct ($couleur, $poids)
//le constructeur demande 2 paramettres
{

 echo"Appel du constructeur.
";

$this->couleur=$couleur; //initialisation de la couleur
$this->poids=$poids ;//initialisation de poids
self::$compteur=self::$compteur + 1;                           
 }
//méthode statique retourne la valeur de compteur
public static function getcompteur()
{
 return self::$compteur;
 }
}
?>

 


Changer le fond
Oregionale Skin
7astuces
Sélectionnez un Fond (11)
7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces
Fond de contenu
7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces