[PHP] Autoload
Résolu/Fermé
Autumn`Tears
Messages postés
1054
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
-
22 juin 2012 à 21:49
aladin07 Messages postés 277 Date d'inscription vendredi 13 avril 2012 Statut Membre Dernière intervention 30 septembre 2012 - 26 juin 2012 à 20:27
aladin07 Messages postés 277 Date d'inscription vendredi 13 avril 2012 Statut Membre Dernière intervention 30 septembre 2012 - 26 juin 2012 à 20:27
A voir également:
- [PHP] Autoload
- Easy php - Télécharger - Divers Web & Internet
- \R php ✓ - Forum PHP
- Php if plusieurs conditions ✓ - Forum PHP
- Echo image php ✓ - Forum PHP
- $This php - Forum PHP
2 réponses
aladin07
Messages postés
277
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
30 septembre 2012
30
Modifié par aladin07 le 24/06/2012 à 15:43
Modifié par aladin07 le 24/06/2012 à 15:43
Et bien parfois on charge beacoup de classes dans un fichier php, au lieu de les inclure une à une on utilise __autoload().
Par exemple si tu as un dossier libraries/ tu pourras inclure automatiquement toutes les classes que tu veux sans inclure manuelement les fichiers. Les fichiers seront inclus au moment ou tu appels ta classe.
Le nom du fichier qui contient la classe doit être IDENTIQUE au nom de la classe
new MyClass va inclure MyClass.php
Encore mieux, utiliser la fonction spl_autoload_register();
Selons php.net __autoload() pourrait être déprecié dans le future, donc il vaut mieux s'habituer à spl_autoload_register()
spl_autolaod_register() a le même principe que __autoload(), sauf que la première utilise un fonction déjà défini par exemple:
Ceci va chercher dans le dossier libraries puis dans le dossier models les fichiers en minuscule. new MyClass va include myclass.php
Si tu as une question n'hésite pas.
Aladin.
Par exemple si tu as un dossier libraries/ tu pourras inclure automatiquement toutes les classes que tu veux sans inclure manuelement les fichiers. Les fichiers seront inclus au moment ou tu appels ta classe.
<?php /* Au lieu de inclue 'libraries/mailer.php'; inclue 'libraries/zip.php'; inclue 'libraries/themes.php'; ...etc.*/ function __autoload($name) { include 'libraries/'.$name.'.php'; } $mail = new Mail(); $zip = new Zip(); $themes = new Themes();
Le nom du fichier qui contient la classe doit être IDENTIQUE au nom de la classe
new MyClass va inclure MyClass.php
Encore mieux, utiliser la fonction spl_autoload_register();
Selons php.net __autoload() pourrait être déprecié dans le future, donc il vaut mieux s'habituer à spl_autoload_register()
spl_autolaod_register() a le même principe que __autoload(), sauf que la première utilise un fonction déjà défini par exemple:
<?php /* Disons qu'on a deux dossiers qui contiennent des classes. Dans le premier les libraries et dans le deuxième les models (dans un MVC) On assume que les fichiers contenants les classes sont en minuscules */ function my_autoload($name) { //Chercher dans le dossier libraries file_exists($file = 'libraries/'.strtolower($name).'.php') // Ou dans le dossier models OR file_exists($file = 'models/'.strtolower($name).'.php'); // Si le fichier existe dans libraries $file récupere // 'libraries/'.strtolower($name).'.php' // sinon elle récupere 'models/'.strtolower($name).'.php' include $file; } spl_autoload_register('my_autoload'); $class = new MyClass();
Ceci va chercher dans le dossier libraries puis dans le dossier models les fichiers en minuscule. new MyClass va include myclass.php
Si tu as une question n'hésite pas.
Aladin.
L'exemple de la doc est plutôt parlant, non ?
http://php.net/autoload
Si la définition d'une classe n'est pas connue, autoload est une solution pour permettre de charger sa définition au moment où on en a besoin.
<?php
function __autoload($class_name) {
include $class_name . '.php';
}
$obj = new MaClasse1();
$obj2 = new MaClasse2();
http://php.net/autoload
Si la définition d'une classe n'est pas connue, autoload est une solution pour permettre de charger sa définition au moment où on en a besoin.
<?php
function __autoload($class_name) {
include $class_name . '.php';
}
$obj = new MaClasse1();
$obj2 = new MaClasse2();
26 juin 2012 à 18:12
Et merci pour ta réponse !
La seule limite à ça, c'est lorsque la classe n'est pas définie par le même nom que le fichier finalement.
26 juin 2012 à 20:27
Tu peux mettre un truc du genre:
function my_auotoload($name)
{
if($name == 'Hello') include 'libraries/myclassname.php';
else include $name.'.php';
}
Tu peux modifier la logique de ta fonction comme tu veux