2011-11-22 6 views
0

이전에이 문제에 대해 답변을 받았으며 그 원인을 알았습니다. 그러나 필자의 경우, 문제는 php 5.3.6의 MacOS Lion (10.7)에서만 발생합니다. 동일한 코드베이스가 PHP 5.3.8에있는 Windows 7 머신에서 실행 중입니다.치명적인 오류 : DbBase 클래스를 다시 선언 할 수 없습니다.

여기 저기에 require_once를 사용했습니다. 문제의 원인이되는 코드 조각은 다음과 같습니다.

class DbBase 
{ 
    ... 
} 

파일이 여러 파일에 포함되어 있습니다.

파일 DBBase.php :

defines Class DBBase 

파일 A_DB.php :

require_once("DBBase.php") 
내가이 시나리오를

if (class_exists('DbBase') != true) 
{ 
    class DbBase 
    { 
     ... 
    } 
} 

: 나는 내부 클래스 선언을 포장하는 경우에는 오류가 사라

파일 B_DB.php :

require_once("DBBase.php") 

파일 foo.php :

require_once("A_DB.php") 
require_once("B_DB.php) 

그래서 파일 DBBase.php 두 번 포함됩니까. 그거야?

모든 의견에 감사드립니다.

+0

"클래스를 재 선언 할 수 없습니다"라는 오류는 클래스를 선언하는 것으로 보이지 않으므로이 코드로 인해 발생할 수있는 가능성은 거의 없습니다. 전체 오류 메시지와 그것이 참조하는 파일/행을 게시하는 것이 좋습니다. – StasM

+0

당신은 정확합니다, 사과드립니다. 문제가되는 코드는 실제로 클래스 정의입니다. 그러나 if (class_exists ('ClassName')! = true)에서 클래스 정의를 래핑하지 않으면 오류가 사라지지 않습니다. –

답변

1

이 오류는 단일 클래스를 한 번이 아닌 여러 번 선언 할 때 발생합니다. 아래의 코드는 그 오류를 던질 것입니다.

class phpp{} 
class phpp{} 

그것은 클래스와 객체에 어떤 큰 변화가 없었던 것처럼 행동은 5.3.6과 5.3.8에서 동일하지 않을 수 있습니다.

requiring once 파일에 중복 코드가 있는지 확인해야합니다. . .

편집 :

require_once를() 문이 다시 파일이 이미 포함되어 있는지 확인하고, 그래서이 포함되지 않은 경우 (필요)합니다 PHP 제외) (필요로 동일하다.

귀하의 경우에는 require 또는 include을 사용하면 여러 번 포함되지 않습니다.

그러나 클래스 재 선언을 방지하기 위해 전체 코드를 재구성해야합니다.

class lol{} 
if(!class_exists("lol")){ 
    class lol{ 
     function ll(){ 
      return "ss"; 
     } 
    } 
} 

echo lol::ll(); 

여전히 ^^에 액세스 할 수 없으므로 여전히 재 선언입니다.

+0

정확한 정보를 포함하도록 제 질문을 수정했습니다. 실수로 사과드립니다. –

+0

@ManishGupta 편집 – Mob

+0

감사합니다. 재 선언을 방지하기 위해 필요한 경비원을 추가했습니다. 그래도 여전히 나를 때리고,이 문제가 창문에 나타나지 않는 이유는 무엇입니까? –

3

동일한 오류가 발생했습니다. 그러나 '단일 클래스를 여러 번 선언'하는 것과 관련이 없습니다. 그것은 다음과 같은 클래스의 백업을 만들었 기 때문입니다 : class.shipping.php class.shipping_092512_bk.php 그런 다음 백업 파일을 서버에 업로드했습니다. 이로 인해 응용 프로그램이 두 클래스로 인해 실패했습니다. 그래서 나는 .php 파일 확장자 'class.shipping_092512.bk'없이 백업의 이름을 바꿨다.문제 해결됨.

관련 문제