Le B.A. BA de la POO en PHP

, par Christophe

Définitions :

Un objet :

Un « objet » est une représentation d’une chose matérielle ou immatérielle du réel à laquelle on associe des propriétés et des actions. exemple : un véhicule , une personne, un animal, un compte bancaire, ...

Une Classe :

contient la définition de l’objet que l’on va creer = c’est le plan de fabrication d’un objet

class Vehicule // Présence du mot-clé class suivi du nom de la classe.
{
  // Déclaration des attributs et méthodes ici.
}

Les Attributs (variables) :

caractéristiques propres à un objet. exemple : nom, prénom, couleur, ...

class Vehicule
{
    private $nombre_roues = 4; // nombre de roues du véhicule, par défaut = 4
    private $couleur = 'vert'; // couleur du véhicule;
    private $nom;
}

Les Methodes (fonctions) :

Des actions que l’on peut appliquer à un objet

class Vehicule
{
    private $nombre_roues = 4; // nombre de roues du véhicule, par défaut = 4
    private $couleur = 'vert'; // couleur du véhicule;
    private $nom;
    private $niveau_carburant = 100

    public fonction klaxonner() // une méthode pour faire du bruit
    {
        echo "tut tut";
    }
}

Instance de classe = résultat d’une instanciation = création d’un objet

exemple : un tricyle est crée à partir de l’objet véhicule

$tricyle = new Vehicule();

// initialisation des variables
$tricyle->nombre_roues = 3;
$tricyle->couleur = 'rouge';
$tricyle->nom = 'velo_toto';

// execution d'une fonction
$tricyle->klaxonner(); // faire du bruit

function __construct()

Permet de sauvegarder les variables passées en argument lors de l’instanciation

class Vehicule {
    public nom;

    public function __construct($recup_nom = 'pas encore de nom'){
        $this->nom = $recup_nom;
    }
}

$tricyle = new Vehicule("Mon_Super_Tricycle");
echo "le nom de mon tricyle = ".$tricycle->$nom; // donnera la valeur : Mon_Super_Tricycle;

Visibilite public / private / protected

  • public, permet d’indiquer que la propriété ou la méthode sera accessible à l’intérieur mais aussi à l’extérieur de la classe
  • private, permet d’indiquer que la propriété ou la méthode sera accessible à l’intérieur de la classe seulement
  • protected, permet d’indiquer que la propriété ou la méthode sera accessible à l’intérieur de la classe et des classes héritées

Quelques petites précisions :

  • Si une propriété est déclarée en utilisant le mot clef var, elle sera définie comme publique
  • Si une méthode est déclarée sans visibilitée, elle sera définie comme publique

Accéder à un attribut : l’accesseur ou getter

création de methodes qui ont comme seul role d’afficher un attribut private

class Vehicule {
    private nom;

    public function __construct($recup_nom = 'pas encore de nom'){
        $this->nom = $recup_nom;
    }

    public fonction getNom(){
        return $this->nom;
    }
}

$tricyle = new Vehicule("Mon_Super_Tricycle");
echo $tricycle->nom; // Error, $nom => private
echo $tricylce->getNom(); // affiche : Mon_Super_Tricycle;

Modifier un attribut : mutateur ou setter

création de methode qui ont comme seul role de modifier un attribut private d’un objet

class Vehicule {
    private nom;
    private roues = 4;

    public function __construct($recup_nom = 'pas encore de nom'){
        $this->nom = $recup_nom;
    }

    public fonction getRoues(){
        return $this->roues;
    }

    public function setRoues($nombre_roues){
        if(is_int($nombre_roues) && $nombre_roues > 0 && $nombre_roues < 10){
            $this->roues = $nombre_roues;
        }
        else {
            trigger_error('Le nombre de roue est invalide', E_USER_WARNING);
        }
    }
}

$tricycle = new Vehicule("Mon_Super_Tricycle");
$tricycle->setRoues(3);
echo $tricycle->getRoues; // affiche 3

$tricycle->setRoues(11);
echo $tricycle->getRoues; // Warning : le nombre de roues est invalide

Exemple complet

- fichier Class - Fichier PHP à executer

Licence Creative Commons Cet article est mise à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.