PEAR::Pagerを使うとautoloadが走ってしまう件
最近のよく訓練されたPHPerはフレームワークに組み込みの機能を使ったりするんだろうけど、そういう波に乗れていない僕は未だにPEAR::Pager使ったりします。今日はそんなPEAR::Pagerの小ネタ。
PEAR::Pagerを使う時は、
<?php $pager = Pager::factory( array( 'mode' => 'Sliding' ) );
みたいにmodeで表示タイプをSlidingかJumpingか指定するわけですが、この表示タイプが独立したクラスとして実装されています。
Pager::factory()では表示タイプのクラスが読み込み済みかをclass_eixstsでチェックしていますが、ここでautoloadが走ります。
なので、アプリ側でautoloadを使って「指定のディレクトリ(path/to/lib/とか)にファイルが無かったらdie」みたいな処理をしていると、Pager::factory()を呼んだら死ぬなんてことになりかねません。
class_existsはPHP5.0.0から第2引数がサポートされて、ここがtrueならautoloadする、falseならしないという仕様になっています。
こいつのデフォルトがtrueなので、PHP4時代のコードを使うと意図しないautoloadが実行されてしまうケースがあります。
個人的にはライブラリ内でclass_existsを使う場合は「class_exists( $classname, false )」とか書くべきだと思うんですが、これをやると逆にPHP4ではWarningが発生するらしいので仕方なし。
まぁ、PEAR::Pager使う時は大人しく
<?php require 'Pager.php'; require 'Pager/Sliding.php';
とか書いとけってことだ。