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 15/01/2011, 01h24   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 2
Points : 2
Par défaut Factory et namespace

Bonjour,

Je tourne en rond depuis un moment et j'aurais besoins d'un conseil.

Dans un pattern d'usine, savez-vous s'il est-il possible d'instancier une classe se trouvant dans un autre namespace?

Dans le code suivant, si $className est égal à "anothernamespace\MyClass" l'exception se produit bien que la classe MyClass est définie dans le namespace anothernamespace.

Code :
1
2
3
4
5
6
7
8
9
 
public function MyFactory($className)
{    	    	
   if (class_exists($className)) {        	
      return new $className;
   } else {
      throw new Exception('Exception');
   }
}
Savez-vous si cela est supporté par PHP 5.3 et quelle serait la bonne syntaxe?

Il me semble que rien ne figure dans le PHP Manual à ce sujet.

Merci pour votre aide.
muxosfatal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 09h42   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 548
Points : 2 548
Envoyer un message via Skype™ à rawsrc
Bonjour,

Est ce que tu as essayé avec
Code :
return new $className();
Cela devrait fonctionner sans problème.
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 13h18   #3
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 2
Points : 2
L'ajout de la parenthèse n'a pas résolu le problème. Voici une description rejoignant mon cas: http://www.php.net/manual/fr/languag...amic.php#91552

Mais le problème ne provient en réalité pas de la Factory elle-même, mais de l'autoload qui est utilisé dans mon cas.


Dans mon cas, le code suivant
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
/* Foo.php */
namespace my;
class Foo
{
	public function sayBaar()
	{
		echo "I say Baar";
	}
}
 
 
/* index.php */
spl_autoload('Foo');
 
$f = new my\Foo();
$f->sayBaar();

renvoie ALEATOIREMENT
Citation:
Fatal error: Uncaught exception 'LogicException' with message 'Class Foo could not be loaded' in ...\index.php:7 Stack trace: #0 ...\index.php(7): spl_autoload('Foo') #1 {main} thrown in ...\index.php on line 7
ET

I say Baar


En remplaçant spl_autoload('Foo') par include('Foo.php'), "I say Baar" s'affiche à tout les coups.


Il me paraitrait plus logique d'effectuer spl_autoload('my\Foo'), mais avec le namespace "my" devant j'obtiens également un résultat aléatoire entre l'exception ci-avant et un

Citation:
Fatal error: Class 'my\Foo' not found in ...\index.php on line 9
Je peux éventuellement essayer de passer à PHP 5.3.4


Quelqu'un a déjà rencontré ce problème?
muxosfatal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 14h19   #4
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 2
Points : 2
Pour le code ci-dessus, il faut mettre la classe Foo dans un répertoire nommé my.

Cela m'indique que je me suis planté au niveau de l'implémentation de l'autoload dans ma structure de l'appli.

Conclusion, la mauvaise utilisation de spl_autoload peut créer des effets de bord avec des comportements aléatoires...
muxosfatal 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 00h59.


 
 
 
 
Partenaires

Hébergement Web