在PHP中的递归函数中实例化一个类

时间:2012-02-23 06:54:15

标签: php class instantiation redeclare

我一直在使用PHP创建一个脚本,现在似乎已经碰到了一堵砖墙。我试图从一个类中的另一个文件中调用一个变量,所以我通过在原始文件中包含该文件然后实例化该类来调用该变量来实现它。但整个事情都在一个递归函数内,我得到致命错误:无法重新声明类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”错误?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题(即你有许多名为JVersion的类需要使用),那么如果没有命名空间中的JVersion类,我就不能确定这个问题。某种方式。要么给它们不同的名称,要么将它们放在不同的PHP命名空间中。

这听起来更像是一个建筑问题,真的;你正在使用的代码似乎没有提供一种以一次性方式获取其版本的方法(没有为这样的冲突设置自己)。理想情况下,您应该只有一个全局JVersion类,可以使用适当的版本号进行实例化;这样就没有班级名称冲突。