-2

同じ名前の 2 つの php クラスがファイルで呼び出された場合に、require_once エラーをスキップする方法を見つける必要があります。a.php と b.php の 2 つのファイルがあり、それぞれにクラス A が内部で宣言されています。index.php 内に、クラス A が宣言された .php ファイルを最初に含めます。また、index.php 内に c.php を含める必要があります。これには、require_once b.php が含まれています。このため、クラス名の重複エラーが発生し、スクリプトが停止します。これに対する回避策を見つけることはできますか? お返事をありがとうございます


もっとよく説明しましょう。Joomla に関するもので、コンポーネント モデルとビューを上書きするプラグインを作成します。モデルとビュー クラスをプラグインに含めました。Joomla は元のコンポーネント モデルとビュー クラスの代わりにそれらを使用します。この問題は、コンポーネント モジュールにコンポーネントの元のモデルとビュー クラスが require_once で含まれている場合に発生します。私のプラグインは元のモデル クラスを使用していないため、元のモデル クラスがあるファイルは Joomla 内に含まれていません。モジュール require_one はコンポーネント モデル クラスを含めることができ、それらのクラスは私のプラグインと同じ名前です。 . プラグイン コードとクラスのみを変更できます。2 番目のコンポーネント クラスは変更できません。

4

3 に答える 3

4

同じ名前の 2 つの php クラスがファイルで呼び出された場合に、require_once エラーをスキップする方法を見つける必要があります。

いいえ、ありません。同じファイルに 2 つのクラスを含めることはできません。うーん、それを言い換えてください。2 つのクラスに同じ名前を付けることはできません (名前空間がない場合)。しかし、真剣に、1 つのファイルに 2 つのクラスを含めるべきではありません。

a.php と b.php の 2 つのファイルがあり、それぞれにクラス A が内部で宣言されています。

DRY原則に違反(レイプ)するため、同じクラスではないことを(/願って)推測します。

これに対する回避策を見つけることはできますか?

同じクラスをコピーしないでください。両方のクラスが異なる名前空間の場合。実際の名前空間を使用した新しい方法または古い方法のいずれか:

namespace Lib\Your\Namespace;

また

class Lib_Your_Namespace
于 2012-08-27T16:14:54.557 に答える
0

require 呼び出しをラップする

if(!class_exists('your_class_name')) {
     require_once('file_name');
}
于 2012-08-27T16:12:31.303 に答える
0

名前空間だと思います-これが必要なものです

于 2012-08-27T16:23:04.140 に答える