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://php.brickhost.com/forums/index.php?topic=10756.0
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.