Constructeur
La programmation orientée objet en PHP : Le constructeur
Ajoutons un constructeur
Actuellement, la seule possibilité qui s'offre à vous est de modifier les attributs force, experience et degats manuellement, une fois l'objet créé. Il existe en PHP une méthode, appelée le constructeur, qui permet d'initialiser ces attributs dès la création de l'objet.<?php
class Personnage {
private $_force;
private $_localisation;
private $_experience;
private $_degats;
public function __construct($force, $degats) { // Constructeur demandant 2 paramètres
echo 'Voici le constructeur !'; // Message s'affichant une fois que tout objet est créé.
$this->setForce($force); // Initialisation de la force.
$this->setDegats($degats); // Initialisation des dégâts.
$this->_experience = 1; // Initialisation de l'expérience à 1.
}
// ...
Si des attributs doivent être initialisés ou qu'une connexion à la BDD doit être faite, c'est le constructeur qui s'en occupe.
Ici, le constructeur demande la force et les dégâts initiaux du personnage que l'on vient de créer. Il faudra donc lui spécifier ceci en paramètre :
<?php
// ...
$perso1 = new Personnage(60, 0); // 60 de force, 0 dégât
$perso2 = new Personnage(100, 10); // 100 de force, 10 dégâts
Ne mettez jamais la méthode__construct avec le type de visibilité private car elle ne pourra jamais être appelée.
L'auto-chargement de classes
Pour une question d'organisation, il vaut mieux créer un fichier par classe comme Personnage.php. Mais si vous avez plusieurs dizaines de classes, et plutôt que d'avoir des dizaines require 'MaClasse.php'; on utilise l'auto-chargement de classe en évitant les erreurs de chargement avec la fonctions pl_autoload_register :<?php
function chargerClasse($classe) {
require $classe . '.php'; // On inclut la classe correspondante au paramètre passé.
}
spl_autoload_register('chargerClasse'); // On enregistre la fonction en autoload pour qu'elle soit appelée dès qu'on instanciera une classe non déclarée.
$perso = new Personnage;
En PHP, il y a ce qu'on appelle une "pile d'autoloads". Cette pile contient une liste de fonctions. Chacune d'entre elles sera appelée automatiquement par PHP lorsque l'on essaye d'instancier une classe non déclarée. Nous avons donc ici ajouté notre fonction à la pile d'autoloads afin qu'elle soit appelée à chaque fois qu'on essaye d'instancier une classe non déclarée.