POO, manipuler les objets
La Classe est la définition abstraite d’un objet. Elle définit la structure de chaque objet qu’on va pouvoir créer. C’est comme un moule qu’on va utiliser pour produire les objets. Chaque objet va donc posséder la même structure que le ‘moule’.
Créer un objet
Lorsque que la classe est déclarer (le moule est prêt), vous pouvez l’utiliser pour créer des objets. On dit que la classe instancie l’objet
L’opérateur new permet d’instancier un objet.
<?php
class Voiture{
public $marque = "peugeot";
public function demarrage(){
echo "La voiture de marque ".$this->marque." démarre"; // la marque de lui-même
}
}
$maVoiture = new Voiture(); // un objet
?>
Il est possible de créer plusieurs objets avec la même classe.
<?php
class Voiture{
public $marque = "peugeot";
public function demarrage(){
echo "La voiture de marque ".$this->marque." démarre"; // la marque de lui-même
}
}
$maVoiture = new Voiture();
$uneAutreVoiture = new Voiture(); // nouvel objet
?>
Les deux objets sont identiques (possèdent les mêmes propriétés et méthodes à la création) mais ce ne sont pas les mêmes (ils peuvent être manipulés différemment).
Accéder à une propriété
On peut accéder à une propriété de l’objet avec la syntaxe -> à appliquer sur l’objet. La propriété est appelée sans la signe $.
<?php
class Voiture{
public $marque = "peugeot";
public function demarrage(){
echo "La voiture de marque ".$this->marque." démarre"; // la marque de lui-même
}
}
$maVoiture = new Voiture();
echo $maVoiture->marque;
?>
Affichage
peugeot
Vous remarquez qu’on peut accéder à la même propriété au sein de la classe – dans la méthode demarrage() – avec la variable $this.
$this->marque
Le $this fait référence à l’objet lui-même.
Accéder à une méthode
On peut accéder à une méthode de l’objet avec la syntaxe -> à appliquer sur l’objet. La méthode est appelée sans la signe $ et avec les parenthèses ( ).
<?php
class Voiture{
public $marque = "peugeot";
public function demarrage(){
echo "La voiture de marque ".$this->marque." démarre"; // la marque de lui-même
}
}
$maVoiture = new Voiture();
$maVoiture->demarrage(); // appel de la méthode
?>
Affichage
La voiture de marque peugeot démarre
Passage d’une instance en paramètre
Vous pouvez faire passer, en argument d’une méthode de classe, un objet de la même classe en mentionnant le nom de la classe, suivi d’un espace, puis du nom de la variable objet (l’instance).
<?php
class Voiture{
public $marque = "peugeot";
public function demarrage(){
echo "La voiture de marque ".$this->marque." démarre";
}
public function information(Voiture $objvoiture){ // instance de la classe en paramètre
echo "Je suis une voiture de marque ".$this->marque;
}
}
$maVoiture1 = new Voiture();
$maVoiture2 = new Voiture();
$maVoiture1->information($maVoiture2);
?>
Affichage
Je suis une voiture de marque peugeot
Il s’agit d’une déclaration de type (ici une instance de la classe), le type doit être ajouté avant le nom du paramètre. Cette déclaration impose que le paramètre soit d’un certain type lors de l’appel de la méthode.
Constante de débogage
A tout moment, dans une méthode, vous pouvez faire appel aux métaconstantes __CLASS__ et __METHOD__ . Elles retourneront les noms de la classe et de la méthode en cours d’exécution.
<?php
class Train {
private $type;
function avance(){
echo 'classe : '.__CLASS__.'<br>methode : '.__METHOD__ ;
}
}
$train = new Train();
$train->avance(); // affiche 'classe : Train - Train::avance'
?>
Affichage
classe : Train
methode : Train::avance
Il existe d’autres constantes magiques que vous pouvez consulter sur php.net.
Vérifier le type d’un objet
L’opérateur instanceof retourne TRUE si un objet a pour parent une classe donnée ou une sous-classe donnée.
<?php
class Velo {
}
$velo = new Velo();
if ($velo instanceof Velo) {
echo "C'est un vélo";
}
?>
Affichage
C'est un vélo
Il est possible de connaitre la classe exacte d’un objet et non pas son appartenance à une famille via la fonction get_class(). En fournissant un objet en paramètre, elle renvoie une chaîne de caractères contenant le nom de la classe à laquelle appartient l’objet.
<?php
class Moto {
function name() {
echo "Mon nom est " . get_class($this);
}
}
$moto = new Moto();
// en externe
echo "Son nom est " . get_class($moto)."<br>";
// en interne
$moto->name();
?>
Affichage
Son nom est Moto
Mon nom est Moto