2009-08-25 10 views
0

私は最後に私がクラスを構成した方法になっていたことに気付いたPHPプロジェクトで最近問題がありました。ページに複数のクラスを含めると、両方のクラスが同じ親クラスを共有すると、スクリプトは失敗しました。私は今問題を解決しましたが、なぜ誰かが私が何をしているのか正確に説明できないのだろうかと疑問に思っていました。ここ は動作しませんでした何のイラストです:初心者のPHPクラスの継承に関する質問

クラスA.
クラスBはA.
クラスCはA.
クラスDはB.
EはC.

Iを拡張 クラスを拡張拡張拡張しますクラスDとクラスEが必要で、スクリプトが失敗します。クラスCがAを継承しない場合は、すべて正常に動作します。 明らかに、それはクラスAを2回必要とすることと関係があるが、誰かがそれを私にとって非常に簡単な言葉で説明することができるだろうか?

+0

どのようなエラーメッセージが表示されますか? – RaYell

答えて

3

あなたはすべてのクラスを1回だけ宣言することができます。あなたのクラスが複数回定義されているファイルが必要な場合、パーサはclass Aに出会い、内部参照を行い、「こんにちは、あなたはすでにそのクラスを定義しています」をベールします。最も簡単な解決策は、すべてのクラスを独自のファイルに入れ、requireの代わりにrequire_onceと呼ぶことです。

+0

私はこれがそうかもしれないと思う...私はいつもrequireとnot_onceを使わなかったので、実際には何の違いがあるのか​​分からなかったので!各クラスはそれ自身のファイルです。 – musoNic80

3

独自のファイルに各クラスがありますか?

require_once/include_onceの代わりにrequire/includeを使用していますか? include_onceとrequire_onceはインクルードされたファイルの同じテーブルを共有しないので、一貫して使用する必要があります。

PHP5では、一貫して__autoload関数を使用します。

2

includedファイルで定義されている関数またはクラスは、グローバルスコープで宣言されています。このため、おそらく再宣言エラーが発生しています。解決策はrequireまたはincludeの代わりにrequire_onceまたはinclude_onceを使用することです。

しかし、最も洗練された方法は__autoloadですが、PHPバージョン5以降が必要です。オートローディングの唯一の欠点は、どのような失敗も自分自身では処理できない致命的なエラーであることです。