IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Factory et namespace


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Est ce que tu as essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return new $className();
    Cela devrait fonctionner sans problème.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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

    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?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    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...

Discussions similaires

  1. expression XPath et namespace
    Par gendalf37 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/10/2004, 14h26
  2. parser un XHTML bien formé (problème namespace)
    Par luta dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 18/10/2004, 13h55
  3. [Conception][Factory] Packages inheritance
    Par ludovic.fernandez dans le forum Général Java
    Réponses: 5
    Dernier message: 05/07/2004, 18h02
  4. [Debutant][Divers] - namespace et attributs
    Par sebbb dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 15h40
  5. Erreur récurrente (namespace)
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 3
    Dernier message: 25/02/2003, 11h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo