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
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    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...

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 537
    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
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    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[''];
        }
    }

  4. #4
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    463
    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 : 463
    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
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    J'ai bien noté et je pense avoir de la dispo demain pour regarder...

+ 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, 01h15
  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, 20h27
  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, 15h43
  4. Pourquoi ces directives #ifndef ... en haut des .h
    Par Patrick PETIT dans le forum C
    Réponses: 8
    Dernier message: 07/03/2003, 00h53

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