[PHP] Autoload
Résolu
Autumn`Tears
Messages postés
1054
Date d'inscription
Statut
Membre
Dernière intervention
-
aladin07 Messages postés 277 Date d'inscription Statut Membre Dernière intervention -
aladin07 Messages postés 277 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'essaie de comprendre le fonctionnement d'autoload, mais sans véritable succès...
Comment l'implémenter, comment s'en servir, etc.
Si vous avez un peu de temps à partager pour m'éclairer un peu dans ce domaine, merci.
J'essaie de comprendre le fonctionnement d'autoload, mais sans véritable succès...
Comment l'implémenter, comment s'en servir, etc.
Si vous avez un peu de temps à partager pour m'éclairer un peu dans ce domaine, merci.
A voir également:
- [PHP] Autoload
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
2 réponses
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();
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.
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