__autoload()

__autoload() - PHP - Programmation

Marsh Posté le 03-12-2006 à 21:13:56    

Bonsoir,
 
J'aimerais mettre en oeuvre la fonction __autoload() que je viens de découvrir (je débute en PHP objet) pour charger mes classes, mais je me confronte à un petit problème. Voilà comment j'ai procédé.
 
J'ai mis ma fonction __autoload() dans un fichier "autoloading.php" que j'inclus dans toutes mes autres pages de la manière suivante
 

Code :
  1. require_once('autoloading.php');


 
l'ennui c'est que lorsque ma fonction __autoload() s'execute, le chemin pour chercher les classes peut varier (car les fichiers qui l'appellent ne se trouvent pas forcément dans le même répertoire), j'ai donc procédé comme ceci
 
code de mon autoloading.php
 

Code :
  1. <?php
  2. function __autoload($class_name)
  3. {
  4. if(require_once('class/'.$class_name.'.php'))
  5. {
  6. }
  7. else
  8.  require_once('../class/'.$class_name.'.php');
  9. }
  10. ?>


 
Et ça marche, par contre je ne sais pas si c'est très propre. Qu'en pensez-vous ? Il y aurait-t-il une meilleure syntaxe (ou façon de faire) ?

Reply

Marsh Posté le 03-12-2006 à 21:13:56   

Reply

Marsh Posté le 04-12-2006 à 10:17:30    

Quelle version de PHP ?

Reply

Marsh Posté le 04-12-2006 à 13:23:15    

ben php5...

Reply

Marsh Posté le 04-12-2006 à 15:04:03    

Nan mais oui, mais PHP5 ? 5.1 ? 5.2 ?

Reply

Marsh Posté le 04-12-2006 à 17:24:50    

5.0.4 pourquoi ?


Message édité par Da KJ le 04-12-2006 à 17:25:20
Reply

Marsh Posté le 04-12-2006 à 17:26:17    

Parce que avec spl_autoload_register, on peut utiliser une fonction autoload pouvant faire partie d'une classe par exemple, ce qui permet d'y foutre de la config tout bien :)

Reply

Marsh Posté le 04-12-2006 à 18:37:16    

FlorentG a écrit :

Parce que avec spl_autoload_register, on peut utiliser une fonction autoload pouvant faire partie d'une classe par exemple, ce qui permet d'y foutre de la config tout bien :)


 
euh tu pourrais un peu développer s'il te plaît ? j'ai pas capté :/

Reply

Marsh Posté le 04-12-2006 à 19:20:48    

Genre avec un exemple vite-fait :

Code :
  1. class TehAutoload
  2. {
  3.   const $path = '/home/pouet/www/class/';
  4.   public static function autoload($className)
  5.   {
  6.      require self::$path . $className . '.php';
  7.   }
  8. }
  9. spl_autoload_register(array('TehAutoload', 'autoload'));


Plus propre et pratique :)


Message édité par FlorentG le 04-12-2006 à 19:21:15
Reply

Marsh Posté le 04-12-2006 à 21:55:21    

ok merci j'ai vais essayer de mettre en oeuvre !

Reply

Marsh Posté le 05-12-2006 à 09:44:01    

Tiens, question con: y a-t-il moyen d'enregistrer plusieur loader avec cette fonction ou bien c'est juste du sucre pour eviter de taper les 3 lignes de code qui font la meme chose?

Reply

Marsh Posté le 05-12-2006 à 09:44:01   

Reply

Marsh Posté le 05-12-2006 à 09:50:07    

On peut en enregistrer autant qu'on veut

Reply

Marsh Posté le 05-12-2006 à 10:26:33    

Ok, cool, et l'ordre d'utilisation c'est une pile ou une file?

Reply

Marsh Posté le 05-12-2006 à 10:30:30    

C'est une file, ils sont appellés dans l'ordre où ils ont été enregistrés

Reply

Marsh Posté le 05-12-2006 à 11:39:13    

Parfait. J'entrevois peut-etre enfin la solution pour me faire un systeme de namespace. :bounce:

Reply

Marsh Posté le 05-12-2006 à 11:41:05    

Héhé :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed