Non-static method PEAR::isError() should not be called statically

a coder picture a coder · Oct 8, 2013 · Viewed 32.3k times · Source

After upgrading from RHEL 5x to CentOS 6x, I started seeing these errors in my httpd log:

PHP Strict Standards: Non-static method PEAR::isError() should not be called statically in /web/sites/blah/somescript.php on line 33

I saw similar errors for MDB2. More on that in a 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  }   

The first thing I did was edit /etc/php.ini and add & ~E_STRICT to error reporting. Restarted httpd to load the new config. Still getting these error messages.

Others mentioned the same problem with MDB2, so I updated these packages to the beta releases. This seemed to address MDB2 errors, but I'm still getting the PEAR error messages in httpd log file.

System 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

Is there a different way of invoking PEAR::isError() that will not produce errors?

Answer

Winfield Trail picture Winfield Trail · Jan 22, 2015

I'm afraid @johannes is incorrect - this is very doable. Simply substitute this in your recipe:

if ((new PEAR)->isError($mdb2_dbx)) {
    // Victory! Er, I mean, Error!
    ...
}