PHP5 で PEAR の内部で Non-Static method エラーが出る


PHP5 で set_error_handler() を利用していると、PEAR のライブラリの各所(PEAR::isError, DB::connect など)で E_STRICT(=2048) が発生します。
set_error_handler の呼び出しを次のように変更すると回避可能です。

変更前:
    set_error_handler(‘handler’);
変更後:
 define(‘PHP5′, version_compare( phpversion(), “5.0.0″, “>=” ));
 if(PHP5){
     $old_error_handler = set_error_handler(‘handler’, E_ALL);
 }else{
     $old_error_handler = set_error_handler(‘handler’);
 }

バージョンに応じて第二引数を与えているのがミソです。もちろん、PHP5だけに対応するのであれば、単純に既存のものに第二引数を与えればいいだけです。
 
PHP5 (5.0.5 で確認)では static メソッドの認識が微妙ですね。
 
参考:
- #1491(Make code work on both PHP4 and PHP5) (LiveSupport – Trac)

関連記事:

  1. static ファクトリメソッドの落とし穴
  2. DoJa で Bad Method Signature
  3. PEAR
  4. PEAR DB で ? のほかに使えるもの
  5. PEAR マニュアル日本語版
  1. コメントはまだありません。

  1. トラックバックはまだありません。