bla bla bla
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?php
class Personnage
{
private $force;
private $localisation;
private $experience;
private $degats;
public function deplacer()
{
}
public function frapper()
{
}
public function gagnerExperience()
{
$this->experience++;
}
}
?> |
bla bla bla ...
Créer et manipuler un objet:
On va donc voir comment créer un objet, c'est-à-dire que l'on va utiliser notre classe (qui peut être comparée à une machine) afin qu'elle nous fournisse un objet. Pour créer un nouvel objet, vous devez faire précéder le nom de la classe à instancier du mot-clé new, comme ceci :
Code : PHP - Sélectionner
1 2 3
| <?php
$perso = new Personnage();
?> |
Ainsi, $perso sera un objet de type Personnage. On dit que l'on instancie la classe Personnage, qu'on crée une instance de la classe Personnage.
Auto-chargement des classes
Pour une question d'organisation, il vaut mieux créer un fichier par classe. Vous appelez votre fichier comme bon vous semble et vous placez votre classe dedans. Pour ma part, mes fichiers sont toujours appelés MaClasse.class.php.
Si vous essayez de créer une instance de la classe alors que vous n'avez pas inclus le fichier déclarant la classe, une erreur fatale sera levée pour dire que vous instanciez une classe qui n'existe pas. Et c'est là qu'intervient l'auto-chargement des classes. Vous pouvez créer dans votre fichier principal (c'est-à-dire celui où vous créerez une instance de votre classe) une ou plusieurs fonction(s) qui tenteront de charger le fichier déclarant la classe. Dans la plupart des cas, une seule fonction suffit. Ces fonctions doivent accepter un paramètre, c'est le nom de la classe qu'on doit tenter de charger. Par exemple, voici une fonction qui aura pour rôle de charger les classes :
1 2 3 4 5 6
| <?php
function chargerClasse ($classe)
{
require $classe . '.class.php'; // On inclue la classe correspondante au paramètre passé
}
?> |
Essayons maintenant de créer un objet pour voir si il sera chargé automatiquement (je prends pour exemple la classe Personnage et prends en compte le fait qu'un fichier Personnage.class.php est créé).
1 2 3 4 5 6 7 8
| <?php
function chargerClasse ($classe)
{
require $classe . '.class.php'; // On inclue la classe correspondante au paramètre passé
}
$perso = new Personnage(); // Instanciation de la classe Personnage qui n'est pas déclarée dans ce fichier
?> |
Et là… Bam ! Erreur fatale ! La classe n'a pas été trouvée, elle n'a donc pas été chargée… Normal quand on y réfléchi ! PHP ne sait pas qu'il doit appeler cette fonction lorsqu'on essaye d'instancier une classe non déclarée. On va donc utiliser la fonction spl_autoload_register en spécifiant en premier paramètre le nom de la fonction à charger :
1 2 3 4 5 6 7 8 9 10
| <?php
function chargerClasse ($classe)
{
require $classe . '.class.php'; // On inclue 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();
?> |
Et là, comme par magie, aucune erreur ne s'affiche ! Notre auto-chargement a donc bien fonctionné.
Décortiquons ce qui s'est passé. 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.
Partager