2012-02-23 2 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; 
} 

Есть ли способ, которым я могу преодолеть «Фатальная ошибка : Не удается переопределить класс JVersion? Ошибка?

+1

Почему вы это делаете? Что это значит для достижения? Почему вы постоянно определяете константу снова и снова? Зачем? – cspray

ответ

0

Если я правильно понял проблему (т. Е. У вас есть много классов с именем JVersion, которые вам нужно использовать), то я не уверен в какой-либо мере обойти эту проблему, не назвав классы JVersion в некотором роде. Либо дайте им разные имена, либо поместите их в разные пространства имен PHP.

Это действительно похоже на архитектурную проблему; код, который вы используете, по-видимому, не дает способа получить свою версию в одноразовом режиме (не настраивая себя на такие конфликты). В идеале вы должны просто иметь глобальный класс JVersion, который может быть инсентирован с соответствующими номерами версий; таким образом не было бы конфликтов имен классов.

+0

О, у меня нет много классов с именем JVersion. Это только один класс, но поскольку он находится в рекурсивной функции, он вызывается несколько раз. – GamingX

+0

На самом деле, я вызываю номер версии скрипта, просматривая каталоги, если установлен скрипт, и если он есть, ищет файл и извлекает номер версии из файла, если вы понимаете, что я имею в виду. – GamingX

+0

@Syed: Вы говорите, что есть только один класс с именем 'JVersion', но вы включаете его с другим путем при каждом вызове' functionname', поэтому каждый раз он представляет собой другой файл. Даже если они все структурно идентичны, они все еще разные классы. –

Смежные вопросы