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 :

comment récupérer le message du vrai PHP ?


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 120
    Points : 68
    Points
    68
    Par défaut comment récupérer le message du vrai PHP ?

    Je voudrais savoir comment récupérer le vrai message de PHP (comme ci dessous) qui m'indique que la variable est protégé et n'est pas accessible :
    Fatal error: Cannot access protected property Pere::$_variableProtectedPere in E:\eclipse-SDK-3.3-win32\WorkSpace_Eclipse\www.lesite.com\TEST 2\testPublic.php on line 31

    En rajoutant une méthode magique __set il ne m'affiche plus le message (ci dessus) de PHP mais mon message à moi qui est contenu dans une Exception :

    Y a t-il une solution ?

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    class Pere {
     
    	protected $_variableProtectedPere;
     
    	public function __construct() {
    	}
     
    	public function __set($var, $valeur){
    		try {
    			/** Juste une petite mise en forme du tableau pour ne pas avoir des elements de type NULL*/	
    				$clees = array_keys( get_class_vars(get_class($this)) );
    				$tab = array_flip($clees);
    				$tab = array_flip($tab);
     
    		/**
    		 * si il n'existe ou inaccessible pas alors on lance l exception 
    		 * */
    				if( !in_array($var, $tab )) {
     
    				//élément non trouvé
    				throw new Exception("La variable pour ecriture <b>$var</b> " .
    						"n existe pas dans la classe ".get_class($this)." !");
    			}
     
    				if( in_array($var, $tab )) {
     
    				//élément trouvé mais non accessible
    				throw new Exception("La variable <b>$var</b> " .
    						"est protege ou prive dans la classe ".get_class($this)." !");
    			}
    		}
    		catch (Exception $e) {
    			echo 'L\'erreur suivante a été générée : ' . "\n";
    			echo( $e->getMessage() );
    			echo("<BR />");
    		}
    	}
    }
     
    //Instanciation
    $objPere = new Pere();
    $objPere->_variableProtectedPere=5;

  2. #2
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Le problème est que cette erreur n'est pas une Exception, mais une fatal error, qui arrête donc l'exécution du script. Même avec la définition d'un error handler custom, on ne peut pas surcharger la gestion de fatal errors (et donc, récupérer le message réel).

    Ceci dit, pour rajouter une précision à ta problématique de variable protected, si tu utilises __set() alors en théorie le problème ne se pose plus ...

    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
     
    class Pere {
      // ...
     
      public function __set( $var, $val ) {
        $this->$var = $val;
      }
     
      public function __get( $var ) {
        return $this->$var;
      }
     
    }
     
    $pere = new Pere();
    $pere->_variableProtectedPere = 5; // via __set(), c'est une fonction membre qui accède à la donnée protected, donc pas d'erreur...
    echo $pere->_variableProtectedPere; // pareil pour __get()

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    ben tu n'as qu'à le re créer. Ou créer une exception memberNotFound qui affiche le message comme le fait php.

    Quelques pistes comme sa :
    __FILE__
    __LINE__
    __CLASS__
    debug_backtrace ou debugbacktrace je ne sais plus

    bye

Discussions similaires

  1. Comment récupérer une variable javascript en php?
    Par sheira dans le forum Langage
    Réponses: 13
    Dernier message: 07/12/2010, 12h00
  2. Comment récupérer une variable javascript dans PHP
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2010, 06h08
  3. Comment récupérer mes messages de Outlook Express ?
    Par Lowelace dans le forum Thunderbird
    Réponses: 1
    Dernier message: 16/03/2008, 22h35
  4. Comment récupérer les messages d'erreurs ADO ?
    Par philnext dans le forum Bases de données
    Réponses: 6
    Dernier message: 05/04/2007, 14h01
  5. [MFC] Comment récupérer ce message ?
    Par julien.nasser dans le forum MFC
    Réponses: 15
    Dernier message: 24/05/2006, 11h38

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