# PHP/Classes
## Théorie générale sur la POO

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

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 :
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 :
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 :
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

Pour accéder à l'attribut $un_attribut, on écrit :
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
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.

### Utilisation des méthodes

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 :
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

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.

### Constructeur

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
Syntaxe PHP5
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.
Pour rendre optionnelles les parenthèses, tous les paramètres de la méthode doivent être optionnels :
Syntaxe PHP4
Syntaxe PHP5

### Destructeur

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

### AutoLoad

Pour utiliser une classe il faut l'avoir
Syntaxe PHP5
Fichier autoload.php
Fichier index.php

### Surcharge

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 :

### Classes abstraites

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.

### Interface

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.
| Fonctions | Base de données |