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 :

Fatal error : Cannot redeclare class


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 1
    Par défaut Fatal error : Cannot redeclare class
    Voila les différents parties d'abord j'ai la
    Class category.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    class Category extends Model{ 
        var $table = "personnages";
     
    }
    Class model.php
    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
    <?php
     
    class Model{
        public $table;
     
            public function read ($fields=null){
            if ($fields==null)$fields="*";
            $sql="select $fields from ".$this->table." where id=".$this->id;
            $req=mysql_query($sql) or die(mysql_error());
            $data=mysql_fetch_assoc($req);
            foreach ($data as $k=>$v){
                $this->$k=$v;
            }
        }
        static function load($name){
            require("$name.php");
            return new $name();
        }
     
    }
    Ces deux classes sont dans le même dossier
    Ensuite j'ai la connexion qui est
    core.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    mysql_connect("localhost","root","");
    mysql_select_db("test");
    mysql_query("SET NAMES 'utf8'");
    require("model/model.php");
     
    ?>
    et le fichier qui affiche
    category.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    require "core.php";
     
    $category = Model::load("Category");
    $category->id=19;
    $category->read();
    echo $category->nom;
     
    ?>
    Mais à l’exécution ce message apparait :

    Fatal error: Cannot redeclare class Model in C:\wamp\www\test\Class\model\model.php on line 3

    Et j'arrive plus à corriger quelqu'un peut m'aider
    Merci

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Logiquement, tu déclares deux fois ta classe Model. Cela vient probablement d'un double chargement du fichier de définition de la classe. Pour éviter cela, je te conseille d'utiliser require_once à la place de require : require_once("model/model.php");
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Conseil: utilise un seul fichier .php par classe et donne lui l'extension .class.php.
    Ensuite, mets en place un autoloader pour charger les classes à la demande, c'est très simple si tu as tous tes .class.php dans un même répertoire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    if (!set_include_path('chemin/ver/test/classes'.PATH_SEPARATOR.get_include_path()))
      die('Cannot register include path');
     
    spl_autoload_extensions('.class.php,.php,.inc');
    spl_autoload_register();
     
    // testons tout ça
    var_dump( class_exists('Model', true) );
    De cette façon tu n'auras plus jamais à t'occuper du chargement des classes, ce sera automatique

  4. #4
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 495
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 495
    Par défaut
    Woah Benjamin... je ne conaissais pas cette methode... sympas !
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Pour en savoir plus sur l'autoloading, consultez la doc.

    Bonus, voici ma propre classe d'autoload:
    - https://github.com/bdelespierre/php-...rary.class.php
    - (doc) http://bdelespierre.github.com/php-a..._library.html*

    Elle permet le chargement dynamique de libraries entières en crawlant récursivement des répertoires entiers pour trouver des classes.

Discussions similaires

  1. Fatal error: Cannot redeclare class
    Par legrandse dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 19/01/2011, 11h47
  2. [PEAR] Fatal error: Cannot redeclare class net_ldap_util
    Par osnet dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 28/06/2010, 21h24
  3. Réponses: 2
    Dernier message: 10/01/2010, 17h39
  4. [Dates] Fatal error : Cannot redeclare class
    Par ediawara dans le forum Langage
    Réponses: 10
    Dernier message: 27/11/2007, 14h47

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