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 :

pourquoi ça redéclare ?


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut pourquoi ça redéclare ?
    Bonjour,
    je ne comprends pourquoi j'ai ce message d'erreur :

    Fatal error: Cannot redeclare getController() (previously declared in C:\projets\newsite\config\routing.php:4) in C:\projets\newsite\config\routing.php on line 15
    Code php : 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
    <?php
     declare(strict_types=1);
     
    function getController(string $path): string
    {
        // une route ne doit renvoyer qu'un controller et absolument rien d'autre
        // attention tout est sensible à la casse !!! majuscule != minuscule
        $routes = [
            'menu1' =>'\\PasDePanique\\controller\\'. Index::class,
            '404' =>'\\PasDePanique\\controller\\'. Error404::class,
        ];
     
     
        $parts = explode('/', $path);
        return "";
        //return $routes[$parts[0]] ?? $routes['404'];
    }
    Si quelqu'un comprend...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 436
    Points : 4 930
    Points
    4 930
    Par défaut
    Bonjour,

    La traduction de l'erreur dit que cette fonction a été déjà créée avec le même nom dans le fichier routing.php ligne 4.

    Tu peux vérifier si la fonction existe avant de la déclarer en utilisant function_exists
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (!function_exists('getController')){
       //la fonction n'existe pas, tu peux donc la déclarer ici
    }
    else {
    //la fonction existe déjà, impossible de la redéclarer
    }

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse. J'ai fait ça et j'ai un autre message d'erreur :
    Fatal error: Maximum call stack size of 196608 bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached during compilation. Try splitting expression in C:\projets\newsite\config\routing.php on line 11
    Code php : 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
    <?php
     declare(strict_types=1);
     
    if (!function_exists("getController")) {
        function getController(string $path): string
        {
            // une route ne doit renvoyer qu'un controller et absolument rien d'autre
            // attention tout est sensible à la casse !!! majuscule != minuscule
            $name_space = '\\PasDePanique\\controller\\';
            $routes = [
                '' => $name_space . Index::class,
            ];
     
            $parts = explode('/', $path);
            $a = $parts[0];
            return $routes[$a] ?? $routes['']; //pour supprimer un msg d'erreur
            //return $routes[$parts[0]] ?? $routes[''];
        }
    }
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Membre éclairé
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 351
    Points : 719
    Points
    719
    Par défaut
    Bonjour,

    Le premier message indique que tu ne peux pas définir la fonction getController() à la ligne 15 car celle-ci est déjà définie à la ligne 4 dans routing.php.
    Le code de ton message correspond au code complet du fichier routing.php ?
    Si oui, est-ce que ce fichier serait importé plusieurs fois pendant l'exécution (peut-être à cause d'une mauvaise gestion de include/require par exemple) ?

    Le deuxième message d'erreur peut se produire lors d'un appel récursif qui n'aboutie pas (une fonction s'appelle elle même en boucle) mais difficile de t'aider plus sans connaitre le contexte d'exécution de ton code.
    Essaye de revenir à la première version de ton code sans function_exists et commence par corriger la première erreur pour voir ensuite si la seconde erreur se produit encore.

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    J'ai bien noté et je pense avoir de la dispo demain pour regarder...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

Discussions similaires

  1. [Templates] Quel système utilisez-vous ? Pourquoi ?
    Par narmataru dans le forum Bibliothèques et frameworks
    Réponses: 270
    Dernier message: 26/03/2011, 00h15
  2. Que choisir ? C# , VB.NET, C++, Delphi ? pourquoi ?
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 475
    Dernier message: 08/04/2010, 19h27
  3. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  4. Pourquoi ces directives #ifndef ... en haut des .h
    Par Patrick PETIT dans le forum C
    Réponses: 8
    Dernier message: 06/03/2003, 23h53

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