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(1687877326)
}
<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 Mardi 27 juin 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.