2012-02-23 62 views
0

我一直在使用PHP創建一個腳本,並且似乎在此刻碰到了一堵磚牆。我試圖從一個類中的另一個文件中調用一個變量,所以我通過將文件包含在原始文件中然後實例化該類來調用該變量來解決該問題。但是整個事情都在遞歸函數中,我得到了致命錯誤:無法重新聲明JVersion類。我已經粘貼下面的代碼的一部分:在PHP中遞歸函數中實例化一個類

... 
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; 
} 

有沒有一種方法可以讓我克服了「致命錯誤:無法重新聲明class JVersion「錯誤?

+1

你爲什麼這樣做?這意味着什麼?爲什麼你會一遍又一遍地定義一個常量?爲什麼? – cspray 2012-02-23 07:12:11

回答

0

如果我正確地理解了這個問題(即您需要使用名爲JVersion的許多類),那麼我無法解決此問題,因爲沒有以某種方式命名您的JVersion類。要麼給他們不同的名字,要麼放在不同的PHP名字空間中。

這聽起來更像是一個建築問題,真的;你使用的代碼似乎沒有提供以一次性方式獲得其版本的方式(沒有爲這樣的衝突設置自己)。理想情況下,您應該擁有一個全局的JVersion類,該類可以使用適當的版本號進行檢測;這樣就不會出現類名衝突。

+0

哦,我沒有很多名爲JVersion的類。它只是一個類,但由於它在遞歸函數中,所以它被多次調用。 – GamingX 2012-02-23 13:17:55

+0

實際上,我正在通過搜索目錄搜索腳本的版本號是否安裝了腳本,如果是,查找文件並從文件中檢索版本號,如果明白我的意思。 – GamingX 2012-02-23 13:35:22

+0

@Syed:你說只有一個名爲'JVersion'的類,但是你在每次調用'functionname'時都用不同的路徑包含它,所以每次都是不同的文件。即使它們在結構上完全相同,它們仍然是不同的類別。 – 2012-02-26 07:23:04