Les Objets en PHP¶
Evolutions et grands principes :¶
Les objets existent en PHP à partir de la version 4
Changements importants en PHP 5 : Convergence vers le modèle objet de Java
Introduction comme en Java d’interfaces et de classes abstraites
emploi des modifieurs private et public comme en java
On retrouve aussi __toString(), __clone() et un mécanisme de traitement des exceptions semblable à celui de Java.
Les constructeurs s’appellent désormais : __construct()
et les destructeurs __destruct()
les méthodes portent le mot clef function mais ne signalent pas leur type de retour
les commentaires de documentation se font à la manière de Java
Indication
Les objets s’instancient avec le mot clef new comme en Java ou C++ mais on utilise -> pour signifier l’appel d’une méthode. Le . est déjà pris pour la concaténation des chaînes…
Un Objet Simple Etudiant en PHP¶
Fabriquons maintenant un objet simple en PHP. Ecrivons un objet représentant un étudiant avec ses données:
identifiant
nom
date de naissance
et des méthodes pour opérer sur ces données:
constructeur
getters et setters
equals()
toString() pour affichage
ce qui donne le code suivant:¶
<?php
/** Classe Etudiant en PHP */
class Etudiant{
/** Identification unique d'un etudiant */
protected $etudiant_id;
/** Nom de l'etudiant */
protected $nom;
/** Date de naissance de l'etudiant */
protected $naissance;
public function __construct($id, $nom,$naissance){
$this->etudiant_id = (int)$id; // cast vers integer
$this->nom = (string)$nom; // cast vers string
$this->naissance= (int)$naissance; // cast vers date(timestamp)
}
/**
* Fonction de comparaison simplifiee entre etudiants
* == comparera id, nom et naissance
*/
public function equals(etudiant $etudiant){
return ($this->getId() == $etudiant->getId());
}
public function getId(){
return $this->etudiant_id;
}
public function getNom(){
return $this->nom;
}
public function getNaissance(){
return $this->naissance;
}
public function __toString(){
setlocale(LC_TIME, "fr_FR");
$ne=strftime('%A %d %B %Y',$this->naissance);
return 'etudiant: id=' . $this->getId().', nom='.$this->getNom()." $ne";
}
}
/* Test : */
date_default_timezone_set('Europe/Paris');
$etu=new Etudiant(234,"Talon",time());
var_dump($etu);
echo "<br/>";
echo $etu;
Resultat:¶
object(Etudiant)#1 (3) { ["etudiant_id":protected]=> int(234) ["nom":protected]=> string(5) "Talon" ["naissance":protected]=> int(1675894523) } <br/>PHP Deprecated: Function strftime() is deprecated in /Users/roza/work/iut/prog/PHP/php-depot/source/exemples/etudiant.php on line 40 Deprecated: Function strftime() is deprecated in /Users/roza/work/iut/prog/PHP/php-depot/source/exemples/etudiant.php on line 40 etudiant: id=234, nom=Talon Mercredi 08 février 2023
Execution¶
Indication
Lorsqu’on utilise l’opérateur de comparaison == sur des objets, ceux-ci sont comparés en utilisant les règles suivantes:
deux objets sont égaux s’ils sont instances de la même classe et ont les mêmes attributs et valeurs, les valeurs étant comparées avec l’opérateur ==.
Lors de l’utilisation de l’opérateur d’identité ===, les objets sont identiques uniquement s’ils font référence à la même instance de la même classe.
Avertissement
Beaucoup de programmeurs débutants se contentent d’utiliser PHP comme un langage purement procédural sans utiliser son côté objet. Ceci les bloquera tôt ou tard dans l’apprentissage du langage et des grands frameworks PHP. Si vous êtes trop mal à l’aise avec les Objets, suivez d’abord un cours d’introduction à la programmation Objet, en Java, Python ou C++ par exemple.