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 :

Que veux dire: Call to private ErrorLogging::__construct() from invalid context [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Que veux dire: Call to private ErrorLogging::__construct() from invalid context
    Bonjour,

    Je viens de récupérer un script d'un site XYZ et j'essaye de l'exécuter car pourrait solutionner un de mes gros problèmes.

    Je reçois le message suivant quand j'essaye l'exécution sous APACHE 2.2.15

    F:\WebSites\errorlogging\index.php:0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PHP Fatal error:  Call to private ErrorLogging::__construct() from invalid context in F:\WebSites\errorlogging\index.php on line 4
    PHP Stack trace:
    PHP   1. {main}() F:\WebSites\errorlogging\index.php:0
    Je n'ai modifié que le fichier index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    require_once $_SERVER['DOCUMENT_ROOT'] . "/class/errorlogging.php" ;
    /*Whatever*/
    new ErrorLogging;
    $i = 10 ;
    $i = $i / O ;
    /*Whatever*/
    ?>
    En ajoutant les lignes en gras.

    Et un fichier config directement inclut dans la classe ErrorLogging,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    define('DEBUGGING', TRUE);  
    define('ADMIN_ERROR_MAIL'		, 'admin@jecrapahute.fr');
    define('SEND_ERROR_MAIL'		 , FALSE);   
    define('SEND_ERROR_FROM'		, 'errors@jecrapahute.fr');
    define('IS_WARNING_FATAL'		, TRUE);
    define('ERROR_LOGGING'			  , TRUE);
    define('ERROR_LOGGING_FILE'		, 'f:/phperrlog/error.log');
    define('SITE_GENERIC_ERROR_MSG'     , '<h1>Portal Error!</h1>');
    Je tiens à préciser que le fichier en gras, après triple-check existe bien !!!

    La classe en question se trouve en pièce jointe.

    Merci à ceusssss qui me donneront la lumière

    Esteban
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private function __construct()
    __construct doit être public

  3. #3
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Que veux dire: Call to private ErrorLogging::__construct() from invalid context
    Merci mais semble non suffisant.....

    J'ai commenté le "private" du __constructeur, pas assez....

    J'ai supprimé tous les "private", cela bouge mais pas suffisant....

    PHP me dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [04-Oct-2010 08:54:03] PHP Parse error:  syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in F:\WebSites\errorlogging\class\ErrorLogging.php on line 36
    [04-Oct-2010 08:54:03] PHP Stack trace:
    [04-Oct-2010 08:54:03] PHP   1. {main}() F:\WebSites\errorlogging\index.php:0
    Ce qui revient en regardant le code à une autre question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class ErrorLogging
    {
    	/**
    	 * @var $_backTrace Backtrace message in _customError() method
    	 * @see _customError
    	 */
    ==> 36	$_backTrace;
    Mais dans ma précipitations, j'ai supprimé tous les "private" des méthodes, ce que j'ai rétablit....

    Et j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Website Generic Error
    
    ERROR NO : 2
    TEXT : Division by zero
    LOCATION : F:\WebSites\errorlogging\index.php, line 6, at October 4, 2010, 9:02 am
    Showing Backtrace : 
     
    Qu'il n'y ait pas de backtrace dans ce cas me semble normal pour un test de 5 lignes....

    Je ne ferme pas la discussion car souhaiterait savoir si c'est bien "normal"....

    Merci en tout cas....

    Esteban

  4. #4
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    J'ai supprimé tous les "private", cela bouge mais pas suffisant....
    Aïe aïe aïe... Si une méthode a été déclarée private, il y a une bonne raison à ça. Sinon, inutile de faire du PHP5 et d'utiliser des classes

    C'est cette ligne qui plante, comme tu l'as déjà remarqué. Un constructeur doit être public... sauf quand on veut justement le cacher. Par exemple pour un Singleton

    Aussi, à moins que tu ne sois très sûr de toi et/ou que ce soit toi l'auteur de la classe ErrorLogger, je déconseille donc fortement de rendre public un constructeur private.

    Par contre, il doit y avoir dans la classe ErrorLogger une méthode publique statique permettant d'obtenir l'instance (unique, si c'est un Singleton) du Logger. Elle devrait s'appeler ErrorLogger::get(), ou ::instance(), on ::getInstance(). Voir la doc de la classe pour plus de détails.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Herode Voir le message
    Aussi, à moins que tu ne sois très sûr de toi et/ou que ce soit toi l'auteur de la classe ErrorLogger, je déconseille donc fortement de rendre public un constructeur private.
    __construct doit être forcement public
    après pour le reste il a fait n'importe quoi

  6. #6
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut lien vers site officiel
    Citation Envoyé par stealth35 Voir le message
    __construct doit être forcement public
    Faux.

    Et je renvoie à nouveau vers le modèle Singleton pour un exemple concret

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/09/2008, 18h11
  2. Réponses: 1
    Dernier message: 15/03/2007, 12h25
  3. Que veux dire _("chaine") sous gnu/linux?
    Par trois_1 dans le forum C
    Réponses: 3
    Dernier message: 25/08/2006, 14h12
  4. Que veux dire cette fonction
    Par Vlacar dans le forum ASP
    Réponses: 2
    Dernier message: 10/04/2006, 13h28
  5. que veux dire complexitée ...
    Par phakso dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 04/03/2006, 15h51

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