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 :

[Système] Fatal error: Cannot redeclare lineicmp() (previously declared


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut [Système] Fatal error: Cannot redeclare lineicmp() (previously declared
    Bonjour,

    J'avais déjà posté sur ce problème il y a plusieurs mois et je n'avais pas eu de solution. Depuis, j'ai installé Fedora Core 6 sur mon serveur de développement en espérant que la mise à jour arrangerait mon problème mais il n'en est rien. Voici donc mon problème :

    J'ai une classe qui se résume ainsi :
    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
    18
    19
    20
    21
    22
     
    class MaClasse {
      private $c = array();
     
      function __construct($info) { [...] }
     
      function afficherParDate() {
        $this->trier("heure");
        $this->trier("date");
     
        //Affichage...
      }
     
      function trier($colonne) {
        $GLOBALS["col"] = $colonne;
        function lineicmp() {
          //Compare une ligne du tableau selon les valeurs de la colonne spécifiée
          //dans $GLOBALS["col"] puis renvoie -1, 0 ou 1
        }
        usort($this->c, "lineicmp");
      }
    }
    Donc, lorsque j'arrive à ma fonction qui permet d'afficher mon tableau en ordre de date, je veux qu'il soit trié par heure puis par date pour arriver dans un ordre correct. Le problème, c'est que si j'appelle 2 fois de suite la fonction trier() dans une même fonction, je revoit un message qui dit que lineicmp() a déjà été déclarée. Il semble donc que la fonction lineicmp() reste déclarée au sein de la fonction afficherParDate() même si, logiquement, elle devrait disparaître à la fin de la fonction trier().

    Je me demandais si il y a un moyen de "dé-déclarer" une fonction ou bien une autre façon d'arranger le problème. À noter que je ne peux par définir lineicmp() en dehors de trier() car usort() ne la trouverait pas. Il n'existe aucune autre fonction nommée lineicmp() dans mon code.
    Pensez à la balise

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Bonsoir,

    Je me rappelle de ce post.

    En regardant si on pouvait détruire une fonction, j'ai vu create_function(), et je me suis dit que cela pouvait répondre a ta problematique.

    De cette facon la fonction ne devrait pas être redéclaré mais je ne sais pas si cela passera avec usort()

    A essayer

    Bonne continuation
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  3. #3
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    J'essaie ça après le repas et je fais une mise a jour du post.

    Merci!
    Pensez à la balise

  4. #4
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    Avec create_function() ça semble fonctionner à merveille. J'ai fait des tests en sortant tout ça d'une classe et ça a passé.

    Ma théorie sur ce problème (après avoir revisé entièrement mon code pour m'assurer qu'il n'y avait rien d'irrégulier nulle part) est qu'en déclarant une fonction dans une autre fonction qui elle même est déclarée dans une classe, on atteint un niveau ou Apache ne détruit pas les déclarations des sous fonction au terme de leur fonction mère. Ainsi, lorsqu'on rappelle cette même fonction mère, la sous-fonction se retrouve 2 fois dans la pile du système et l'erreur survient.

    Ça a du sens?
    Pensez à la balise

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2015, 09h23
  2. Réponses: 13
    Dernier message: 10/12/2011, 17h12
  3. [Dates] Fatal error : Cannot redeclare class
    Par ediawara dans le forum Langage
    Réponses: 10
    Dernier message: 27/11/2007, 14h47
  4. Fatal error: Cannot redeclare extension()
    Par karimphp dans le forum Langage
    Réponses: 3
    Dernier message: 12/06/2007, 12h56
  5. Réponses: 32
    Dernier message: 26/09/2006, 09h40

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