0

私は PHP を使用してスクリプトを作成してきましたが、現時点ではレンガの壁にぶつかっているようです。クラス内にある別のファイルから変数を呼び出そうとしているので、元のファイルにファイルを含めてから、クラスをインスタンス化して変数を呼び出しました。しかし、全体が再帰関数内にあり、Fatal error: Cannot redeclare class JVersion. が発生します。以下のコードの一部を貼り付けました。

... 
function functionname($path)
{
...
define('_JEXEC', true);
require_once ($path ."libraries/cms/version/version.php");
$test_class = new JVersion();
$jma_ver    = $test_class->getShortVersion();
...
functionname($path);
...
}

これは、version.php 内のコードの一部がどのように見えるかです

defined('_JEXEC') or die;
final class JVersion
{
public $RELEASE = '2.5';
public $DEV_LEVEL = '1';
public function getShortVersion()
{
return $this->RELEASE.'.'.$this->DEV_LEVEL;
}

「致命的なエラー: クラス JVersion を再宣言できません」というエラーを解決する方法はありますか?

4

1 に答える 1

0

私が問題を正しく理解している場合(つまりJVersion、使用する必要のある名前付きのクラスが多数ある場合)、JVersion何らかの方法でクラスの名前空間を設定しない限り、この問題を回避する方法がわかりません。それらに異なる名前を付けるか、異なるPHP名前空間に配置します。

これは、実際にはアーキテクチャ上の問題のように聞こえます。使用しているコードは、そのバージョンを使い捨ての方法で取得する方法を提供していないようです(このような競合に備えることなく)。理想的にはJVersion、適切なバージョン番号でインスタンス化できるグローバルクラスが必要です。このようにして、クラス名の競合は発生しません。

于 2012-02-23T07:10:18.687 に答える