Les array en php
nous allons voir comment les implémenter, c'est-à-dire écrire du code dedans. Nous verrons ensuite comment utiliser notre classe : donc on l'instanciera, c'est-à-dire créer un objet
Bien Dans le chapitre précédent nous avons créé notre classe.
Notre classe est désormais prête mais ne sert à rien tout seule.
Comme nous l'avons expliqué dans le cours précédent, une classe est perçue comme un moule capable de réaliser autant d'objets de même type et de même structure qu'on le souhaite.
Nous allons donc passer maintenant à la phase de concrétisation d'une classe.
On a créé notre classe, mais nos méthodes sont vides !
Dans ce chapitre, nous allons voir comment les implémenter, c'est-à-dire écrire du code dedans.
Nous verrons ensuite comment utiliser notre classe : donc on l'instanciera, c'est-à-dire on créera un objet
Pour implémenterons nos méthodes, nous aurons besoin d'accéder aux attributs de notre objet et de les modifier. Nous allons utiliser une pseudo-variable $this.
La pseudo-variable $this est une simple variable disponible dans toutes les méthodes lorsque l'on se servira de notre classe.
La variable $this est tout simplement l'objet que nous sommes en train d'utiliser, elle le représente.
C'est à partir de cette variable que l'on pourra appeler des méthodes de notre objet ou modifier un attribut.
Et pour cela on utilise l’opérateur ->
L'opérateur -> doit être placé juste après $this.
Cet opérateur signifie « dans cet objet, on prend cet attribut » ou « dans cet objet, on appele telle méthode »
Et le code aura la forme suivante :
Exemple : Copier le code
<?php class Vehicule { // Attributs(les variables ) sont les suivates private $roue = 4 ; /* le nombre de roues du véhicule par défaut est 4 */ private $porte ; private $carburant ; private $compteur ; private $consomation ; // Constantes // Méthodes (les fonctions) public function deplacer() /* Une méthode qui déplacera le véhicule (modifiera son attribut compteur).*/ { $this->compteur = $this->compteur + 50; } } ?>
Explications du code :
Nous avons décidé de déplacer l’objet vehicule de 50 kilomètre et donc augmenter son compteur de 50.
La pseudo-variable $this veut dire « cet objet ».
L’expression $this->compteur veut dire « dans cet objet je prend l’attribut compteur ».
En fin $this->compteur = $this->compteur + 50 veut dire « Dans cet objet, assigne à l'attribut compteur cette valeur qui est l’ancien compteur augmenté de 50 »
On peut aussi écrire cette ligne d’une autre manier plus courte :
Exemple : Copier le code
<?php $this -> compteur += 50 ; ?>
On va donc voir comment créer un objet, c'est-à-dire qu'on va utiliser notre classe pour créer notre objet.
La création d'un objet à partir d'une classe, s'appelle l'instanciation.
Un objet est alors appelé instance d'une classe.
La création d'un objet permet:
- La création d'un espace mémoire qui sera réservé pour recevoir toutes les propriétés durant l’utilisation de cet objet.
- L'attribution d'un nom à l'objet.
- Chaque instance possède son propre jeu d’attributs (de propriétés), mais ses méthodes sont communes à toutes les instances de cette classe.
Objet = identité + état (attributs) + comportement (méthodes)
Pour créer un nouvel objet, vous devez faire précéder le nom de la classe à instancier du mot-clé new, comme ceci :
Dans cet exemple nous allons créer deux objets :
L’objet Vehicule1
L’objet Vehicule2
Exemple : Copier le code
<?php $vehicule1 = new Vehicule(5 ,25,12570); $vehicule2 = new Vehicule(6,2,70,125760); ?>
Ainsi, $Vehicue1 et $Vehicue2 seront deux objets de type Vehicule. On dit qu'on instancie la classe Vehicule ou qu'on crée deux instances de la classe Vehicule.
Si vous essayez de créer une instance de la classe alors que vous n'avez pas déclaré la classe, une erreur fatale sera générée pour dire que vous instanciez une classe qui n'existe pas.
Quand on crée une classe c’est pour pouvoir la réutiliser quand on veut et là où on veut.
Donc et pour une question d'organisation, il vaut mieux créer un fichier par classe.
Pour déclarer vos classes vous pouvez le faire de deux manières :
1 – par la fonction include ou require de php L'inconvénient majeur de cette méthode est d'avoir à écrire une longue liste d'inclusions de fichier classes au début de chaque script : une inclusion par classe. 2 – Vous créez dans votre fichier principal (c'est-à-dire celui où vous voulez créer une instance de votre classe) une ou plusieurs fonction(s) qui tenteront de charger le fichier déclarant la classe. En général une seule fonction suffit. Voici une fonction
Exemple : Copier le code
<?php function chargerClasse ($classe) { include( $classe.‘.php’ ); /* On inclue la classe correspondante au paramètre passé*/
} spl_autoload_register ('chargerClasse'); /* enregistrement de la fonction en autoload pour qu'elle soit appelée dès qu'on instancie une classe non déclarée*/ ?>
Cette fonction doit être placée au début du fichier où vous voulez instancier votre classe puis vous pouvez instancier votre classe où vous voulez dans ce fichier comme suit :
Exemple : Copier le code
<?php $classe= "maclass" ;/* ici on donne à la variable $classe la valeur maclass.php on suposant que le fichier qui contient la classe porte le même nom que la classe soit maclasse */ $objet = new maclass(); ?>
Avant de commencer je vous rappelle notre classe Vehicule de tout à l'heure à laquelle j’ai ajouté quelques modifications à enregistrer dans un fichier « Vehicule.php »:
Code de « Vehicule.php »:
Exemple : Copier le code
<?php class Vehicule { // Attributs(les variables ) sont les suivates private $roue = 4 ; /* le nombre de roues du véhicule par défaut est 4 */ private $porte ; private $carburant ; private $compteur ; private $tauxConsomation ; // Constantes // Méthodes (les fonctions) /* Une méthode qui déplacera le véhicule (modifiera son attribut compteur).*/ public function deplacer() { $this->compteur = $this->compteur + 50; } /* Une méthode qui déplacera le véhicule (modifiera son attribut compteur).*/ public function consommer() { $this->carburant = $this->carburant -($this->tauxConsomation * 50); } /* cette fonction sert à donner un nombre de roues à un véhicule*/ public function setRoue($R) { $this->roue=$R; } /* ces fonctions servent à l’affichage des attributs (propriétés) ou accesseurs */ public function roue() { return $this->roue ; } public function carburant() { return $this->carburant ; } } ?>
Vu que tous les attributs doivent être privés pour les protéger et alors pour pouvoir quand même accéder à leur valeur, on a inventé les accesseurs.
Ce sont des méthodes simples qui ne font que renvoyer le contenu de l'attribut.
Chacune de ces méthodes porte le même nom que l'attribut dont elle renvoie la valeur, comme
par exemple roue() dans l’exemple précédent.
Nous allons créer deux instances de notre classe c’est à dire deux objets.
Nous utilisons l'opérateur -> qui veut dire « dans cet objet, donne-moi cet attribut » ou « dans cet objet, appele cette méthode ».
Mettez le code dans un fichier « teste.php » comme suit et exécutez le :
Code de « teste.php » :
Exemple : Copier le code
<?php function chargerClasse ($classe) { include( $classe.'.php'); /* On inclue la classe correspondante au paramètre passé*/ } spl_autoload_register ('chargerClasse'); /* enregistrement de la fonction en autoload pour qu'elle soit appelée dès qu'on instancie une classe non déclarée*/ /* ici on donne à la variable $classe la valeur maclass.php on supposant que le fichier qui contient la classe porte le même nom que la classe soit maclasse */ $classe= "Vehicule" ; // On crée deux objets $vehicule1 = new Vehicule (); // Un premier véhicule. $vehicule2 = new Vehicule (); // Un second véhicule. /* On donne un nombre de roues au véhicule 2 donc on modifie l’attribut $roue */ $vehicule2->setRoue(6); // On appele la méthode deplacer() $vehicule1->deplacer (); // $vehicule1 va se déplacer de 50 kilomètres. echo 'Le véhicule 1 a ', $vehicule1->roue(), ' roues,alors que le deuxième véhicule a ', $vehicule2->roue(), ' roues.<br />'; echo 'Le véhicule 1 a ', $vehicule1->carburant(), ' litres dans son réservoir.<br />'; ?>
Ce qui affichera :
le véhicule a été déplacé de 50 kilomètres
Le vehicule 1 a 4 roues,alors que le deuxième vehicule a 6 roues.
Le vehicule 1 a 0 litres dans son résérvoir.