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 :

Cannot redeclare class/autoloading à partir du post #11


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    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 493
    Billets dans le blog
    1
    Par défaut Cannot redeclare class/autoloading à partir du post #11
    Bonsoir,

    j'ai le message d'erreur du titre. En m'inspirant de cette vieille discussion (https://www.developpez.net/forums/d1...-seule-classe/), preuve que j'ai déjà eu ce problème, j'ai essayé ce code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if(!in_array("MyPdo",get_declared_classes())) {
    class MyPdo extends PDO {
    //...déclaration de la classe
    }
    mais l'erreur reste. Donc comment la supprimer ?

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    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 493
    Billets dans le blog
    1
    Par défaut
    Je m'aperçois que je n'ai pas donné de détails. Donc pour créer la variable de connexion, je mets sur chaque page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include_once "../includes/connect_mysql.php";
    où connect_mysql.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php 
    if(empty($bdd)){
    	include_once (__DIR__.'/class_MyPdo.php');
    }
    //// connexion
    try{
    				if(empty($bdd)) $bdd = new MyPdo("calendar");//("calendar");
      }
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}			
    ?>

    et class_MyPdo.php :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE);
    ini_set('display_errors','1'); 
     
    // MyPDO
     // ls : la classe MyPdo hérite de la classe PDO (extends)
     if(!in_array("MyPdo",get_declared_classes())) {
    class MyPdo extends PDO {
     
    	protected $DB_NAME;
     
    	protected $HOST = "---";
     
    	protected $USER ="---";
     
    	protected $PASS ="---";
     
     
     
    // ls : le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres	
    	function __construct($db_name) {	
    	/* ls : la variable $pdo_options, ça date de ma formation de 2012 */ 
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
    	$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
    	$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
     
    	$this->DB_NAME = $db_name;
    	parent::__construct('mysql:host=' . $this->HOST . ';dbname=' . $this->DB_NAME,$this->USER,$this->PASS,$pdo_options);
     
    	}
    }	
     
    }
    ?>

  3. #3
    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
    Tu peux essayer avec class_exists.
    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]

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    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 493
    Billets dans le blog
    1
    Par défaut
    Merci de la proposition Celira ; néanmoins si je rajoute l'utilisation de cette fonction :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     if(!class_exists('MyPdo'))) {
    class MyPdo extends PDO {
    //déclaration de la classe
      }
    }
    page blanche

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    Salut laurentSc

    Pourquoi n'es-tu pas passé au mécanisme d'autoloading ?
    Ce problème ne se serait jamais posé.

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    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 493
    Billets dans le blog
    1
    Par défaut
    Tu m'as déjà fait la même remarque y a 2,5 ans ! https://www.developpez.net/forums/d1...-seule-classe/. J'avais abandonné n'y arrivant pas.

    Je viens de réessayer :

    Code dans la page principale :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    function my_autoloader($class) {
        include 'includes/class_'.$class.'.php';
    }
     
    spl_autoload_register('my_autoloader');
    ?>
    suppression des include où on définit la classe.
    En gros dans la page connect_mysql.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php 
     
    	//include_once (__DIR__.'/class_MyPdo.php');
     
    //// connexion
    try{
    				$bdd = new MyPdo("calendar");//("calendar");
      }
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}			
    ?>

    Mais ce fichier reste inclus là où on a besoin de la base de donnée : include (dirname(__DIR__).'/includes/connect_mysql.php');mais page blanche...

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

Discussions similaires

  1. [1.x] Erreur installation, cannot redeclare class sfDoctrineBaseTask
    Par __fabrice dans le forum Symfony
    Réponses: 13
    Dernier message: 31/05/2010, 13h09
  2. Réponses: 2
    Dernier message: 10/01/2010, 17h39
  3. [Dates] Fatal error : Cannot redeclare class
    Par ediawara dans le forum Langage
    Réponses: 10
    Dernier message: 27/11/2007, 14h47
  4. [Wamp] cannot redeclare class maClasse
    Par pcdj dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 10/01/2007, 08h03
  5. Cannot redeclare class...
    Par DeezerD dans le forum Langage
    Réponses: 4
    Dernier message: 02/11/2005, 18h51

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