alternative a __autoload() ? - PHP - Programmation
Marsh Posté le 13-01-2009 à 18:28:23
| jokaritaff a écrit : [...] et j'aimerais que la fabrique d'objets de mon composant charge le fichier en fonction du nom de l'appel.  | 
 
C'est ce que fait __autoload non ? 
| Code : 
 | 
 
Marsh Posté le 13-01-2009 à 18:33:58
Dans ce genre de cas, trace un peu ce que tu fais. 
Que vaut $_callClass après que t'ai changé sa valeur? 
Que vaut "dirname(__FILE__).'/Calls/'.$_callClass.'.php' "?
Marsh Posté le 13-01-2009 à 18:37:23
un problème de casse dans le nom de la classe qui est ignoré par require_once ?
Marsh Posté le 14-01-2009 à 09:23:46
Si t'as déjà un autoload quelque part, attention à l'appel à class_exists. Par défaut il appelle autoload si la classe n'est pas existante, il faut filer en deuxième paramètre false pour empêcher ça : 
| Code : | 
Marsh Posté le 14-01-2009 à 10:20:14
je viens de trouver d'ou vient l'erreur 
en fait dans ma fabrique d'objet je fais  
 
WSCall::create(WsCall::GET_ACCOUNT, WSCall_GetAccount::TYPE_CLOSED); 
 
en clair je demande a la fabrique de me créer un objet WSCall_GetAccount et lui envoie aun paramètre TYPE_CLOSED 
L'erreur vient de la : je peux pas utiliser TYPE_CLOSED puisqu'il est membre statique de la classe WSCall_GetAccount qui n'est pas encore chargée au moment de l'appel la méthode a create(). 
 
merci pour votre aide. 
par ailleurs je me demande si j'utilise bien le pattern de fabrique...
Marsh Posté le 14-01-2009 à 18:23:53
Moi j'utilise le spl_autoload_register, c'est assez pratique. 
http://fr.php.net/manual/fr/function.spl-autoload.php 
 
// my Autoload function  
function autoload($class_name) 
{  
 if (file_exists('include/' . $class_name . '.class.php')) 
 	@ include ('include/' . $class_name . '.class.php'); 
} 
 
// AUTOLOADER - Set up autoloading. 
spl_autoload_register('autoload');
Marsh Posté le 14-01-2009 à 18:30:11
ben __autoload() est utile comme gestionnaire unique. 
mais si tu veux un autoload par composants, la t'es obligé de surcharger.
Marsh Posté le 13-01-2009 à 18:18:39
bonjour
j'aimerais charger des classes a la volée sans passer par __autoload()
par exemple j'ai un composant pour appeler un web service
chaque appel est géré par une sous-classe
et j'aimerais que la fabrique d'objets de mon composant charge le fichier en fonction du nom de l'appel.
Ca eviterait ainsi de charger toutes les classes d'appels pour 1 seule utilisée
exemple qui marche pas:
le require_once n'a pas l'air de fonctionner
car le code qui appelle WSCall:create('GetAccount') genere un message d'erreur : "class WSCall_GetAccount not found"
et pourtant le chemin est bon (j'ai verifié en l'éditant avec vi)
alors que si j'utilise ma méthode qui fait des require_once de tous les fichiers, la ca marche.