Début de la boite de navigation du chapitre
Classes
Icône de la faculté
Chapitre no 7
Leçon : PHP
Chap. préc. :Fonctions
Chap. suiv. :Base de données
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « PHP : Classes
PHP/Classes
 », n'a pu être restituée correctement ci-dessus.

Théorie générale sur la POO

modifier

La programmation orientée objet est un style de programmation qui associe à des éléments réels (un panier d'achat, par exemple), une série de variables et de fonctions.

Dans le domaine de la POO, la fonction d’un objet est appelée méthode et une variable attribut.

Pour que PHP puisse comprendre de quoi nous parlons, il est nécessaire de lui expliquer ce que représente l'objet, nous créons donc une classe d'objet.

Utilisation des classes

modifier

En PHP, la création d’une classe se fait en utilisant le mot-clé class suivit du nom de la classe puis d’un bloc d'instruction présentant les attributs et les méthodes de l'objet.

La déclaration d’une classe en PHP ressemble à ça :

Début d’un principe
Fin du principe


Les attributs sont assimilables à des variables local (un peu comme celles créées dans les fonctions, mais qui ne sont pas détruite tant que l’objet existe).

Il est possible d'attribuer des valeurs par défaut aux attributs en utilisant la syntaxe suivante :

Début d’un principe
Fin du principe


Une fois la classe définie, on peut l’utiliser. On va pour cela créer un objet de type MaClasse en utilisant le mot réservé new :

Début d’un principe
Fin du principe


La variable $mon_objet est désormais un objet de classe/type MaClasse (également appelé instance de MaClasse) et possède les attributs et méthodes définis plus haut. L'accès à ces informations s'effectue en utilisant ->.

Utilisation des attributs

modifier

Pour accéder à l'attribut $un_attribut, on écrit :

Début d’un principe
Fin du principe


Attention! Pour accéder à un attribut, il ne faut pas utiliser le dollar $! Autrement, vous accédez à l'attribut portant le même nom que le contenu de la variable $un_attribut

Début de l'exemple
Fin de l'exemple


L'espace de nom d’un objet est totalement séparé du reste du script. Deux variables, une dans l'espace de nom global (le script normal) peut porter le même nom que l'attribut d’un objet sans pour autant pointé vers le même contenu.

Il n’est pas obligatoire d'écrire les attributs dans la classe. Il est possible d'accéder à tout moment, à n’importe quel attribut de l'objet, pour autant que son nom soit un nom de variable valide.

Chaque objet possède ses propres attributs.

Début d’un principe
Fin du principe


Utilisation des méthodes

modifier

L'utilisation des méthodes est plus ou moins similaire à l’utilisation des attributs.

Par exemple, pour accéder à la méthode une_methode() définie plus haut, on va utiliser :

Début d’un principe
Fin du principe


Les méthodes fonctionnent exactement comme les fonctions classiques de PHP.

De la même façon que les attributs, les méthodes possèdent un espace de nom séparé ; il est donc possible d'appeler une méthode str_replace(), même si cette fonction est définie par PHP.

Auto-Référence

modifier

Lors de la création de méthode d'objet, il peut être nécessaire d'accéder aux attributs de ce même objet, pour les modifier par exemple.

Vous pouvez alors utiliser l’objet magique $this représentant l’objet lui-même.

Début d’un principe
Fin du principe


Constructeur

modifier

La programmation orientée objets basique en PHP permet l’utilisation des constructeurs. Il s'agit d’une méthode particulière destinée à initialiser l'objet.

Dans une classe, il ne peut y avoir qu'un seul constructeur.

En PHP4, afin qu'elle soit reconnue comme telle, elle doit porter le même nom que la classe (attention aux majuscules). En PHP5, le constructeur fait appel à une méthode au nom prédéfini, "__construct".

Syntaxe PHP 4

Début d’un principe
Fin du principe


Syntaxe PHP5

Début d’un principe
Fin du principe


Dans ce cas, lors de la création de l’objet (l'instanciation), on précise le nom du client comme si l’on appelait la fonction.

Début d’un principe
Fin du principe


Pour rendre optionnelles les parenthèses, tous les paramètres de la méthode doivent être optionnels :

Syntaxe PHP4

Début d’un principe
Fin du principe


Syntaxe PHP5

Début d’un principe
Fin du principe


Début d’un principe
Fin du principe


Destructeur

modifier

La destruction d’une instance se fait automatiquement à la fin d'exécution d’un script mais peut être décorée :)

Syntaxe PHP5

Début d’un principe
Fin du principe


AutoLoad

modifier

Pour utiliser une classe il faut l'avoir

Syntaxe PHP5

Fichier autoload.php

Début d’un principe
Fin du principe


Fichier index.php

Début d’un principe
Fin du principe


Surcharge

modifier

On appelle surcharge l'écrasement d’une méthode de la classe par une autre.

Ainsi dans l'exemple ci-dessus, la fonction "nom" est modifiée dans une deuxième classe :

class MonClient {
    public $nom; 
 
    function __construct($nom) {
        $this->nom = $nom;
    }
} 

$client = new MonClient('Dupont');
echo $client->nom."\n"; // Affiche Dupont

class LeClient {
    public $nom;

    function __construct($nom) {
        $this->nom = strtoupper($nom);
    }
}

$client = new LeClient('Dupont');
echo $client->nom; // Affiche DUPONT

Classes abstraites

modifier

Une classe abstraite est destinée à regrouper des éléments communs à ses classes filles. Elle ne doit donc jamais être déclarée comme "private" pour l'héritage (elle est "public" ou "protected"). Certaines de ses méthodes peuvent être abstraites aussi[1].

abstract class personne
{
    public function nom($nom = "Dupont", $prenom = "Jean") {
        $this->nom() = $nom;
        $this->prénom() = $prenom;
   }
}

class MonClient extends personne 
{
    $Client = new personne;
... // Ce qui distingue un client d’une autre personne
}

class Salarier extends personne
{
    $Salarier = new personne;
... // Ce qui distingue un salarié d’une autre personne
}

Interface

modifier

Les interfaces rassemblent les méthodes publiques qui doivent être utilisées dans des classes. Donc s'il en manque une dans ces dernières, un message d'erreur apparait donc.

interface achat
{
    public function afficher($article);
    public function payer($article);
}

class ecommerce implements achat
{
    public function afficher ($article) // Obligatoire
    {
    ...
    }
    public function payer ($article) // Obligatoire
    {
    ...
    }
}


Références

modifier
  1. php.net