2012-02-23 63 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