今日、このエラーは私にも起こりました、そして私はそれがなぜ起こり得るのか(考えられる他の理由の中で)気づきました。
APCは、クラスの名前空間を含む完全修飾名ですべてのクラスを正しく識別します。残念ながら、同じクラスをさまざまな名前で参照することになりかねません。
例えば:
コードに間違った「use」ステートメントがあり、名前空間のないクラスを名前空間内にあるかのようにインポートしました。
「MyClass」というクラスは名前空間「\」にありました。これは、その正しい完全修飾名が「\MyClass」であることを意味します。
ある時点で、クラスは非修飾名「MyClass」で参照され、自動ロードされました。別のファイルで、useステートメントで名前空間プレフィックスが付いたクラスを(間違って)参照しました。たとえば、「use \ SomeNamespace\MyClass;」と言います。その結果、クラスは(再び)私のグローバル__autoload()メソッドに渡されましたが、名前は異なります。さらに悪いことに、autoloadメソッドはとにかくクラスを見つけるのに十分賢いものでした。
すぐにスクリプトが機能しなくなり、APCが「[apc-error]クラスを再宣言できません...」をApacheWebサーバーのerror.logに書き込んだだけでした。私のページは利用できなくなりました。
これはAPCのバグではなく、単に正しい動作です。
私の場合、APCを一時的に無効にして(競合に関係なくスクリプトが実行されるように)、echoステートメントを__autoload関数にフックして、渡されたパラメーターのリストを生成するのに役立ちました。間違った名前でロードされたクラスはすぐに表示され、それを修正してAPCを再度有効にすることができました。
これが誰かを助けることを願っています。