5 votes

La méthode non statique DB::connect() ne doit pas être appelée statiquement

Nous avons récemment mis à jour notre serveur vers la version 5.4 et nous avons commencé à recevoir l'erreur suivante

Non-static method DB::connect() should not be called statically

J'ai fait des recherches à ce sujet et toutes les solutions proposées n'ont pas fonctionné. J'ai essayé de désactiver le rapport d'erreur strict au niveau des fichiers, des répertoires et du serveur. L'erreur qui apparaît dans le navigateur est la suivante :

DB Error: connect failed module: /path/to/login_class.php line: 49

EDIT : J'ai posté le code complet de lib_app.php :

<?php
/*--------------------------------------------------------------------------

 $RCSfile: lib_app.php,v $ 

 Purpose:   Defines App class. This class is a container for 
            application global variables such as database 
            connection.

 Copyright: 2003 ** Author Omitted **

---------------------------------------------------------------------------
    Functions:

    - none

    Classes:

        App - global application class, holds global variables  

---------------------------------------------------------------------------         
 $Log: lib_app.php,v $
 Revision 1.1.1.1  2004/08/05 23:50:39 ** Author Omitted **

--------------------------------------------------------------------------*/

if (!defined('PHP_APP')) 
    die('<br>'.__FILE__.': This program cannot function without application framework<br>');

class App{

    var $dsn;                           // db connection string
    var $db;                            // db connection object
    var $state;                         // application status
    var $debug =  CONFIG_DEBUG;         // debug status

    function App($dsn){

        $this->dsn  = $dsn;
        $this->db   = DB::connect($dsn);

        if (DB::isError($this->db)) {

            die($this->db->getMessage() . ' module: ' . __FILE__ . ' line: ' .  __LINE__ );
        }
    }   
} // class
?>

S'il vous plaît, quelqu'un a-t-il résolu ce problème et peut-il nous aider ? J'ai consulté de nombreux autres sites, dont un certain nombre sur Stack. Rien.

ANNEXE : Pour que les choses soient claires, pour les haters qui me demanderaient d'"apprendre PDO" ou d'"enterrer cette relique et y mettre du sel", bien qu'hilarant et apprécié, veuillez noter que ce n'est PAS mon code. Il s'agit en fait d'une relique qui devrait probablement être enterrée. Cependant, il s'agit d'un programme de gestion des clients qui a été "livré" par un client pour lequel nous avons conçu et codé beaucoup de choses frontales, et qui a spécifiquement demandé à ce que la zone d'administration ne soit pas touchée. Je ne vais pas réécrire tout le programme si je ne suis pas payé pour cela, mais j'aimerais vraiment résoudre ce problème pour la communauté la plus large possible :

http://pear.php.net/bugs/bug.php?id=12057

http://forums.devshed.com/php-development-5/non-static-method-db-connect-should-not-be-called-statically-462291.html

http://php.brickhost.com/forums/index.php?topic=10756.0

Message d'erreur Normes strictes : Les méthodes non statiques ne doivent pas être appelées statiquement en php

http://forums.phpfreaks.com/topic/265563-help-me-non-static-method-db/

http://forums.codewalkers.com/pear-packages-47/non-static-method-warnings-php-5t-4796.html

Pour l'ensemble des personnes qui ont reçu ZÉRO réponse à cette question qui serait pertinente pour cette situation particulière, et plus de remarques sur leur code obsolète qu'autre chose.

Laissez-moi vous dire ce qu'il en est. J'ai déjà rétrogradé vers PHP 5.3, de sorte que l'erreur n'apparaît plus. Tout fonctionne parfaitement. Mais il doit y avoir une sorte de réponse à ce problème qui a été manquée parmi tous les rires et les remarques, et les rapides "duh... turn off error reporting" (qui ne fonctionne pas), et les commentaires non spécifiques sur la déclaration en tant que variable non statique (derr). Pas de $@# ! les gars. Si c'était aussi simple, je n'aurais même pas posté cela sur Stack.

Dans mon propre intérêt ? Ce n'est plus le cas. Mais le fait est qu'il y aura de nombreuses personnes qui chercheront des réponses à ce sujet et qui ne les trouveront pas ailleurs. J'espère que quelqu'un ici trouvera la solution. Si ce n'est pas le cas, croyez-moi, je n'en perdrai pas le sommeil.

1voto

Zach dev Points 1582

Désolé,

mais pearl il est obsolète ou son successeur l'est MDB2 Envisagez de passer à quelque chose comme PDO à la place.

pour plus de détails... AOP

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X