Non méthode statique PEAR::isError() ne devraient pas être appelée de façon statique
Après la mise à niveau de RHEL 5x pour CentOS 6x, j'ai commencé à voir ces erreurs dans mon httpd journal:
PHP Normes Strictes: Non méthode statique PEAR::isError() ne devraient pas être
appelée de façon statique dans /web/sites/blah/somescript.php sur la ligne 33
J'ai vu des erreurs similaires pour MDB2. Plus que dans un sec.
somescript.php:
32 $mdb2_dbx = MDB2::factory($dsn_mdb2, $mdb2_options);
33 if (PEAR::isError($mdb2_dbx))
34 {
35 $err = '<p>Cannot connect to database: ' . $mdb2_dbx->getMessage();
36 errorHandler($err);
37 }
La première chose que je fis fut de modifier /etc/php.ini
et ajouter & ~E_STRICT
à les rapports d'erreurs. Redémarré httpd pour charger la nouvelle configuration. Toujours ces messages d'erreur.
D'autres ont mentionné le même problème avec MDB2, j'ai donc mis à jour ces paquets à la versions bêta. Cela semblait adresse MDB2 erreurs, mais je suis encore en train de POIRE messages d'erreur dans httpd fichier journal.
Système info:
# pear list
PEAR 1.9.4 stable
MDB2 2.5.0b5 beta
MDB2_Driver_mysql 1.5.0b4 beta
MDB2_Driver_mysqli 1.5.0b4 beta
# php --version
PHP 5.4.20 (cli) (built: Sep 18 2013 19:55:33)
# cat /etc/centos-release
CentOS release 6.4 (Final)
# apachectl -v
Server version: Apache/2.2.15 (Unix)
Question
Est-il un autre moyen d'invoquer PEAR::isError()
qui ne sera pas de produire des erreurs?
OriginalL'auteur a coder | 2013-10-08
Vous devez vous connecter pour publier un commentaire.
Pas il n'y en a pas.
PEAR::isError
est l'héritage de PHP 4 fois.Si le changement du niveau d'erreur dans
php.ini
n'est pas suffisant, vous devriez vérifierSi tout cela ne vous aide pas, établir un niveau approprié à l'aide de la
error_level()
fonction au moment de l'exécution, ou si rien ne vient en aide, de supprimer les erreurs à l'aide de la@
de l'opérateur. À l'aide de@
devrait être évité car il est relativement "lent" (rapport d'erreur est lent tout de même ...) et elle pourrait cacher d'autres erreurs.À Long terme suggestion serait d'utiliser des bibliothèques plus modernes.
Est-il une alternative moderne à PEAR::isError ()?
Est-il possible de l'appeler non-statique?
$pear = new PEAR(); $pear->isError($something);
En php.ini définir le niveau d'erreur d'ignorer les règles strictes d'utilisation :: error_reporting = E_ALL & ~E_STRICT
Sérieusement, comment appelez-vous
PEAR::isError()
sans soulever certaines ridicule erreur? Pourquoi ne sont pas des fonctions de dans les de POIRE/PearMailstatic
???OriginalL'auteur johannes
J'ai peur @johannes est incorrect - c'est très faisable. Il vous suffit de remplacer dans votre recette:
Croyez le ou non, certains modernes de bibliothèques, de faire de cette architectural de base erreur - Yubico PHP bibliothèque d'authentification, notamment. Et parfois une recherche globale et remplacer les battements de chasse pour une nouvelle solution.
Ou, de passer à PDO qui est ce que je l'ai finalement fait.
Certains modernes (ou au moins, récemment construit) des bibliothèques de toujours le faire. Regardez YubiKey, par exemple. Savoir comment résoudre ce problème est important.
Merci pour cette réponse. Je suis d'accord que la mise à niveau vers une solution moderne est la meilleure façon de le faire, mais parfois, tout ce que vous avez besoin est de faire une solution rapide et se déplacer. J'ai été contacté par un client qui a été gêné par le journal des messages de "PEAR::isError() ne devraient pas être appelée de façon statique" dans un morceau de code que nous avons écrit en 2013 et n'ai pas touché depuis. Je n'étais pas sur le point de refactoriser le code avec une bibliothèque moderne de "réparer" un ennuyeux message d'avertissement. Parfois, vous avez besoin d'une solution rapide. Merci de poster!
OriginalL'auteur Winfield Trail
Il peut être intéressant de noter que cet appel
PEAR::isError($obj)
avec un argument est équivalent àis_a($obj, 'PEAR_Error')
, si vous êtes à la mise à jour de votre propre code. Je sais que c'est pas la meilleure pratique consiste à "ouvrir" une méthode de bibliothèque comme ça, mais il est fondamentalement juste une "instance de" vérifier.OriginalL'auteur Ulrich Christensen