0

このPHPバグレポートによると、エラーメッセージは、ifステートメントにクラスをネストし、静的に宣言することによって発生します。

クラスは1か所でしか宣言されていませんが、次の場合に保護しています。

if (!class_exists('myClass', false)) {
    class myClass{

(C ++プリプロセッサディレクティブ/条件付きインクルージョンに似た何かをしようとしています。)

これは、複数のコーダーが不適切に含む可能性から失敗を防ぐためでした(require_onceの代わりにrequire)。この時点での私の唯一の他の選択肢は、ifをコメントアウトし、アプリケーションでインクルードを検索して、それらをすべて「require_once」にすることです。

それで、他の誰かがこのエラーに遭遇しましたか?require_onceにすべてのrequiresを変更する以外に回避する方法はありますか?(このソフトウェアは複数のコーダーによって保守されているので、失敗しないようにしたいと思います。)

  • このエラーはたまに(ランダムに)発生します。発生した場合は、クラスファイルにスペースを追加/削除し、再保存してエラーを修正する必要があります。

ちなみに、APCをインストールした主な理由は、IE9以下のファイルアップロードの進行状況をサポートするためでした。したがって、これらの部分だけを有効にしておくことができれば、これを引き起こす機能を無効にすることができます。(それが可能かどうかはわかりません。)

更新:ファイルを保存しても効果がないようです。一種の「タイムアウト」があるようです。エラーが発生した場合は、エラーが消えるまでしばらく待つ必要があります。

4

1 に答える 1

0

これは、クラスの自動ロードと、クラス自体にクラスの依存関係が含まれていることが原因である可能性があります。

PHP 5.3にアップグレードする前は、PHPの自動読み込み機能を使用するオプションがありませんでした。したがって、クラスの依存関係をクラスファイルに含める必要がありました。例えば:

<?php
require "parent_class.php";

if (!class_exists('this_class')) {
    class this_class extends parent_class {

PHP 5.3にアップグレードしたときに、クラスの自動読み込み機能を実装しました。これはおそらく、「静的」および「動的」クラス宣言(質問のPHPバグによる)が発生している方法です。-実際のクラスファイルで静的に宣言され、オートローダーで動的に宣言されます。

クラスの依存関係に必要なすべてのインクルード/要件を確認して削除しました。これで問題は解決しました。

于 2013-03-07T19:05:23.570 に答える