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


Instantiating a class within a recursive function in PHP

我一直在用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);
...
}

这就是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"错误?

如果我正确理解这个问题(即,您需要使用许多名为JVersion的类),那么如果不以某种方式对JVersion类进行命名,我不确定是否有任何方法可以解决这个问题。要么给它们不同的名称,要么把它们放在不同的PHP名称空间中。

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