Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2011, 16h31   #1
Invité de passage
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 1
Points : 1
Par défaut Fonction __autoload() et associé.

Bonjour à tous,

Voici ma question j'ai un projet plutôt conséquent avec des appels multiples à des classes. Pour "importer" ces classes j'utilise la fonction __autoload() dont voici le code :

Code php :
1
2
3
4
5
function  __autoload($className)
	{
 
 			require_once ('../utils/'.$className.'.class.php');
	}
Dois-je mettre ce code à chaque fois que je vais appeler des méthodes ou créer des objets qui appartiennent à mes classes importées? Où ne dois-je l'utiliser qu'une fois?

Merci pour vos réponses.
ABonus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 17h07   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
l'autoload doit être charger pour être utilisé, tu peux charger autant de classes que tu veux dument l'autoload est la
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 09h24   #3
Invité de passage
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 1
Points : 1
Oui mais cela pose t'il un problème de l'utiliser dans plusieurs classes d'un même projet? Ou puis juste l’appeler sans la redéfinir?
ABonus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 09h59   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par ABonus Voir le message
Oui mais cela pose t'il un problème de l'utiliser dans plusieurs classes d'un même projet? Ou puis juste l’appeler sans la redéfinir?
elle doit être définie au début de chaque script, a toi d'inclure le bon fichier après pour la définir qu'une seule fois, c'est comme un include si tu le met pas le pas le fichier va pas être la
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 10h12   #5
Invité de passage
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 1
Points : 1
Après avoir lu des articles que je dis ce que j'ai compris et tu me dis si j'ai faux :

-autoload c'est une fonction magique qui à chaque fois qu'un objet est créé dans la classe la fonction autoload va charger automatiquement la classe correspondante à l'objet.

-Autoload doit maintenant être remplace par spl_register_autoload

Question : Mettons que je passe un objet par variable de session je récupère cet objet et appelle des méthodes dessus y aura t'il besoin que je mette la fonction autoload au début de ce fichier même si je ne créé pas d'objet?
ABonus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 10h35   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par ABonus Voir le message
-autoload c'est une fonction magique qui à chaque fois qu'un objet est créé dans la classe la fonction autoload va charger automatiquement la classe correspondante à l'objet.
l'autoload est en dehors des classes, un charge pas un objet mais une classe

si je fais : $test = new Test();
comme la classe Test n'existe pas si l'autolaod est définie il va allé chercher Test.php ou Test.class.php dans le dossier du script


Citation:
Envoyé par ABonus Voir le message
-Autoload doit maintenant être remplace par spl_register_autoload
c'est faux, appeler spl_register_autoload definie spl_autoload comme autoload et spl_autoload reviens à faire

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function __autoload($class_name)
{
    $extensions = explode(',', '.inc,.php');
    $class = str_replace('\\', DIRECTORY_SEPARATOR, $class_name);
 
    foreach($extensions as $extension)
    {       
        if(file_exists($class . $extension))
        {            
            require_once $class . $extension;
            return;
        }
    }
 
    user_error(sprintf('%s(): Class %s could not be loaded', __FUNCTION__, $class_name), E_USER_ERROR);
}
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/01/2011, 10h50   #7
Invité de passage
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 1
Points : 1
Ok, merci de m'avoir un peu éclairé sur le sujet par contre tu as une petite idée pour la question que j'ai posé plus haut?

Ah oui aussi l'autoload n'est utilisable que dans un contexte de développement avec framework ou peu importe? Je veux dire est-ce qu'il faut respecter une hierarchie spéciale au niveau des dossiers pour pouvoir utiliser l'autoload? Et surtout ma question est combien de fois dois-je l'utiliser? Je vais essayer de préciser ma question :

Je te décris un peu ma hiérarchie :

-SiteV2
  • admin
  • configuration
  • ...
  • utils
index.php
inscription.php



Je créé des objets seulement dans mon dossier configuration mais j'utilise des méthodes de ces objets dans les fichiers index.php, inscription.php, configuration/index.php,... Où selon toi devrais-je faire mon autoload si je ne dois en faire qu'un seul? Dois-je en faire dès que j'appelle une méthode d'un objet? Et puis je faire par exemple :

Code :
1
2
3
4
5
6
	function  __autoload($className)
	{
 			include_once ('../utils/'.$className.'.class.php');
	}	
	include_once('../utils/labosUtils.php');
	include_once('../utils/utils.php');
ABonus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 10h55   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
l'autoload par default celui de SPL, est surtout utile avec les Namespaces

si tu fais :
Code :
$test = new My\Framework\Test();
il va aller cherche le fichier :
Code :
1
2
3
My
    Framwork
        Test.php
après tu peux faire toi même ton __autoload
au niveau de l'emplacement ca depend de ton site, si il est bien fait le charger qu'une seul fois suffis (par exemple si tout passe par index.php)
Sinon tu le met dans un fichier ooù tu fera un include dessus a chaque fois que t'en a besoin


si t'as un dossier avec toutes tes classes tu peu faire un autoload dessus
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 18/01/2011, 10h57   #9
Invité de passage
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 1
Points : 1
Ok je commence à y voir un peu plus clair, je reviendrais vers toi si j'ai besoin d'aide. : )

Merci pour ton aide.
ABonus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h12.


 
 
 
 
Partenaires

Hébergement Web