logo du langage PHP Les bases du langage PHP

Chapitre 14 - Classe / Objet

Documentation officielle

Ce chapitre est une introduction au PHP Orienté Objet

La Programmation Orientée Objet s'est progressivement imposée, prenant le dessus sur la logique Procedurale, pour des raisons de maintenance de code (même si cette dernière reste valide, elle est désormais "désuette" pour du développement moderne)

Elle est basée sur 4 principes : Abstraction, Encapsulation, Héritage et Polymorphisme

Je ne vais, pour cette introduction à la POO, qu'évoquer le principe d'encapsulation en créant une classe (ici, Habitant), qui va regrouper toutes les spécificités d'un même objet

Désormais, en POO je ne parlerai plus de variables, mais de propriétés (ou attributs). Le terme fonction sera remplacé par méthode

Leur utilité sera la même qu'en procédural, c'est simplement un changement de vocabulaire

Pour résumer, une classe encapsule toutes les caractéristiques (propriétés comme méthodes) d'un sujet particulier (dans un souci de maintenance du code)


<?php
class Habitant{
  public $prenom = 'Philéas';
  public $age = 52;

  public function ville(){
    return 'Créteil';
  }
}

$habitant = new Habitant;
echo '<pre>'; var_dump($habitant); echo '</pre>';
?>

Le var_dump() de $habitant indique que c'est bien un objet de ma classe Habitant


object(Habitant)#1 (2) {
  ["prenom"]=>
  string(8) "Philéas"
  ["age"]=>
  int(52)
}

Par convention, le nom de la classe débute par une majuscule

A mes attributs et méthode, j'ai affecté le mot-clé public

C'est le niveau de visibilité le plus "permissif" (visible par tous)

Il en existe deux autres, plus fréquemment utilisés: protected et private (de plus en plus restrictifs, pour protéger le code)

public va me permettre de faire les manipulations que je veux, sans trop rendre complexe cette initiation

Enfin, j'ai du créer un nouvel objet de ma classe Habitant ($habitant = new Habitant;, avec le mot-clé new) pour pouvoir travailler dessus

On dit que ; j'ai instancié un nouvel objet

Voici la syntaxe pour récupérer toutes mes valeurs


echo "Je me prénomme " . $habitant->prenom . ", j'ai " . $habitant->age . " ans et je réside à " . $habitant->ville();

Je me prénomme Philéas, j'ai 52 ans et je réside à Créteil

L'élément -> (fleche) permet à l'objet instancié ($habitant) d'atteindre tous les attributs (ou propriétés) ainsi que les méthodes encapsulées dans sa classe

Notez que si pour atteindre un attribut (prenom ou age) je ne fais pas appel à $, en revanche pour atteindre une méthode (ville), je ne dois pas oublier les parenthèses ouvrantes et fermantes (sinon, cela reviendrait a vouloir atteindre un attribut ... qui n'existe pas !)